Prepend and Append「掘金日新计划 · 2 月更文挑战」

234 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

Prepend and Append

Timur initially had a binary string† s (possibly of length 00). He performed the following operation several (possibly zero) times:

  • Add 0 to one end of the string and 11 to the other end of the string. For example, starting from the string 1011, you can obtain either 010111 or 110110.

You are given Timur's final string. What is the length of the shortest possible string he could have started with?

†† A binary string is a string (possibly the empty string) whose characters are either 0 or 1.

Input

The first line of the input contains an integer t (1≤t≤100) — the number of testcases.

The first line of each test case contains an integer n (1≤n≤2000) — the length of Timur's final string.

The second line of each test case contains a string s of length n consisting of characters 0 or 1, denoting the final string.

Output

For each test case, output a single nonnegative integer — the shortest possible length of Timur's original string. Note that Timur's original string could have been empty, in which case you should output 0.

Example

input

9
3
100
4
0111
5
10101
6
101010
7
1010110
1
1
2
10
2
11
10
1011011010

output

1
2
5
0
3
1
0
2
4

Note

In the first test case, the shortest possible string Timur started with is 00, and he performed the following operation: 0→100.

In the second test case, the shortest possible string Timur started with is 1111, and he performed the following operation: 11→0111.

In the third test case, the shortest possible string Timur started with is 10101, and he didn't perform any operations.

In the fourth test case, the shortest possible string Timur started with is the empty string (which we denote by ε), and he performed the following operations: ε→10→0101→10101.

In the fifth test case, the shortest possible string Timur started with is 101, and he performed the following operations: 101→01011→1010110.

思路

其实就是首尾都可以加1或者0,给出最后变化的结果,要求出最短的开始,所以从最后结果往前推,如果两边不能满足一边0,一边1的话,就结束循环,然后输出结果就好啦。

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int N=2e5+10;
int a[N];
signed main(){
    IOS;
    int T;
    cin>>T;
    while(T--){
        int n;
        string s;
        cin>>n>>s;
        int m=n;
        for(int i=0,j=n-1;i<j;i++,j--){
            if(s[i]=='0'&&s[j]=='1')m-=2;
            else if(s[i]=='1'&&s[j]=='0')m-=2;
            else break;
        }
        cout<<m<<endl;
    }
    return 0;
}