#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
string S;
cin >> S;
// Create an array to count consecutive 1's blocks.
vector<int> onesBlocks;
int count = 0;
// Group consecutive 1's together
for (int i = 0; i < N; ++i) {
if (S[i] == '1') {
count++;
} else {
if (count > 0) {
onesBlocks.push_back(count);
}
count = 0;
}
}
// If there's a trailing sequence of 1's, add it as well
if (count > 0) {
onesBlocks.push_back(count);
}
// The number of blocks of consecutive ones
int blocksCount = onesBlocks.size();
// Since Roy starts first, he will aim to increase the largest block of consecutive 1's.
// Emon will aim to decrease the length of the largest block.
// In the worst case scenario, if Emon is able to break the blocks optimally, he will reduce the largest block of consecutive 1's to 1.
if (blocksCount == 0) {
// No ones, the answer is 0
cout << 0 << endl;
} else {
// If there are blocks of consecutive 1's, we can reduce them to a maximum of 1
int maxConsecutiveOnes = *max_element(onesBlocks.begin(), onesBlocks.end());
cout << min(maxConsecutiveOnes, 1) << endl;
}
}
return 0;
}