n = int(input())
S = input().strip()

v = [0] * (n + 2)  # 1-based索引
for i in range(1, n + 1):
    v[i] = int(S[i - 1])

h = [0] * (n + 2)
s = [0] * (n + 2)
hh = [0] * (n + 2)
la = [0] * (n + 2)  # 处理到n+1
ss = [0] * (n + 2)

pre = 0
current_sum = 0
for i in range(1, n + 1):
    if v[i]:
        current_sum += pre + 1
        pre = 0
    else:
        pre += 1
    h[i] = s[i] = current_sum
    hh[i] = pre

# 计算前缀和s和ss
for i in range(1, n + 1):
    s[i] += s[i - 1]
    ss[i] = v[i] + ss[i - 1]

# 预处理la数组
for i in range(n, 0, -1):
    if v[i]:
        la[i] = i
    else:
        la[i] = la[i + 1]

q = int(input())
for _ in range(q):
    l, r = map(int, input().split())
    # 处理原代码中的边界条件
    ans = s[r] - s[l - 1] - (r - l + 1) * (h[l] - v[l])
    
    # 检查la[l-1]是否有效
    if la[l - 1] != l:
        # 当la[l-1]为0时表示没有前面的1,可能不需要处理
        # 原代码中直接减去,但要注意hh[l-1]的访问是否越界
        if la[l - 1] != 0 and l - 1 <= n:  # 防止越界
            ans -= (r - la[l - 1] + 1) * hh[l - 1]
    
    if ss[r] - ss[l - 1] != 0:
        print(ans)
    else:
        print(0)