#5535. String

内存限制:512 MiB 时间限制:5 Sec

题目描述

对于一个01串s,定义函数f(s)为s每一位的异或和,例如f(111)=1,f(110)=0,f(101)=0,f(100)=1。
一个01串s是好串,当且仅当其满足以下条件:
串的长度为2的幂次方。
存在两个非负整数x,b,使得i∈[0,|s|-1],si=f(i and x)xorb
(下标从0开始,此处f函数计算的是i and x对应的二进制串的值)。
现对于一个01串,可以使用区间取反操作,即选定一个区间[l,r],0≤l≤r<|s|,
并将[l,r]中的每一位取反(即1→0,0→1)。
现在给出一个长度为n的01串s,q次询问子串sl,r最少经过多少次区间取反操作变成好串

输入格式

第一行包含一个整数n。
第二行包含一个长为n的01串s。
第三行包含一个整数q。
接下来q行每行两个整数表示l,r。保证子串的长度为2的幂次方,且下标从0开始。
n,q≤5000

输出格式

输出q行,对于每个询问输出对应的答案

样例

样例输入


			
8
00000101
3
0 7
2 5
0 3

样例输出


			
2
1
0

数据范围与提示