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)