#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<long long , int>
#define lll pair<long long , pair<long long , long long>>
#define lii pair<long long , pair<long long , int>>
#define iii pair<int , pair<int , int>>
#define iiii pair<pair<int , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))
const long long INF = 1e16;
const long long MOD = 1e9 + 7;
const db EPS = 1e-12;
const int N = 2e5 + 7;
static int _n;
static std::vector<bool> _a;
static long long num_queries;
static int longest_seq_of_1s(){
int ans = 0, curr = 0;
for(int i = 0; i < _n; ++i){
if(_a[i]){
++curr;
}
else{
curr = 0;
}
ans = std::max(ans, curr);
}
return ans;
}
int flip_bits(const std::vector<bool> &flips){
assert((int)flips.size() == _n);
++num_queries;
for(int i = 0; i < _n; ++i)
_a[i] = flips[i] ^ _a[i];
return longest_seq_of_1s();
}
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
int Rand(int l , int r){
return l + rd() % (r - l + 1);
}
bool check(int st , int L , int cnt , int n){
vector<bool> tmp;
tmp.assign(n , 0);
for (int i = 1 ; i <= cnt ; ++i){
tmp[st] = 1;
st += L + 1;
}
int cur = flip_bits(tmp);
if (cur > L){
cur = flip_bits(tmp);
return 1;
}
cur = flip_bits(tmp);
return 0;
}
bool Check(int id , int L , int n){
vector<bool> tmp;
tmp.assign(n , 0);
tmp[id] = 1;
int cur = flip_bits(tmp);
if (cur > L){
cur = flip_bits(tmp);
return 0;
}
cur = flip_bits(tmp);
return 1;
}
pair<int , int> find_longest_subarray_of_ones(int n){
vector<bool> S;
S.assign(n , 0);
int L = flip_bits(S);
while (L > 15){
for (int i = 0 ; i < n ; ++i)
S[i] = Rand(0 , 1);
L = flip_bits(S);
}
if (L == 0) return {-1 , -1};
if (L == n) return {0 , n - 1};
for (int i = 0 ; i <= L ; ++i){
if (check(i , L , n / (L + 1) , n)){
int l = 1 , r = n / (L + 1) , mid , pos = 0;
while (l <= r){
mid = (l + r) >> 1;
if (check(i + (l - 1) * (L + 1) , L , mid - l + 1 , n)){
pos = mid;
r = mid - 1;
}
else l = mid + 1;
}
pos = i + (pos - 1) * (L + 1);
S.assign(n , 0);
S[pos] = 1;
int Length = flip_bits(S);
l = pos;
while (l > 0 && Check(l - 1 , Length , n)) --l;
r = pos;
while (r < n - 1 && Check(r + 1 , Length , n)) ++r;
return {l , r};
}
}
}
int main(){
freopen("difmax.inp" , "r" , stdin);
freopen("difmax.out" , "w" , stdout);
int t;
std::cin >> t;
long long max_qs = 0;
while(t--){
num_queries = 0;
std::cin >> _n;
_a.resize(_n);
for(int i = 0; i < _n; ++i){
bool val;
std::cin >> val;
_a[i] = val;
}
auto [l, r] = find_longest_subarray_of_ones(_n);
if (longest_seq_of_1s() == 0 && l == -1 && r == -1){
cout << "1 \n";
return 0;
}
if(longest_seq_of_1s() != r - l + 1){
std::cout << "0\n";
return 0;
}
if(l == 0 && r == -1){
max_qs = std::max(num_queries, max_qs);
continue;
}
if(r < l || l < 0 || l >= _n || r < 0 || r >= _n){
std::cout << "0\n";
return 0;
}
for(int i = l; i <= r; ++i){
if(_a[i] != 1){
std::cout << "0\n";
return 0;
}
}
max_qs = std::max(num_queries, max_qs);
}
if (max_qs > 100) cout << 0 << '\n';
else std::cout << "1 " << "\n";
return 0;
}
//
//int main(){
//// freopen("difmax.inp" , "r" , stdin);
//// freopen("difmax.out" , "w" , stdout);
// faster;
// inp();
// solve();
// return 0;
//}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmFzdGVyIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBjaW4udGllKE5VTEwpCiNkZWZpbmUgQml0KG1hc2sgLCBpKSAoKG1hc2sgPj4gaSkgJiAxKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgX0xPRzIobmwpIDMxIC0gX19idWlsdGluX2NseihubCkKI2RlZmluZSBjX2JpdChubCkgX19idWlsdGluX3BvcGNvdW50KG5sKQojZGVmaW5lIGlpIHBhaXI8bG9uZyBsb25nICwgaW50PgojZGVmaW5lIGxsbCBwYWlyPGxvbmcgbG9uZyAsIHBhaXI8bG9uZyBsb25nICwgbG9uZyBsb25nPj4KI2RlZmluZSBsaWkgcGFpcjxsb25nIGxvbmcgLCBwYWlyPGxvbmcgbG9uZyAsIGludD4+CiNkZWZpbmUgaWlpIHBhaXI8aW50ICwgcGFpcjxpbnQgLCBpbnQ+PgojZGVmaW5lIGlpaWkgcGFpcjxwYWlyPGludCAsIGludD4gLCBwYWlyPGludCAsIGludD4+CiNkZWZpbmUgbGxsbCBwYWlyPHBhaXI8X19pbnQxMjggLCBfX2ludDEyOD4gLCBwYWlyPF9faW50MTI4ICwgX19pbnQxMjg+PgojZGVmaW5lIGxpIHBhaXI8bG9uZyBsb25nICwgaW50PgojZGVmaW5lIGRiIGxvbmcgZG91YmxlCiNkZWZpbmUgb25CaXQobWFzayAsIGkpIChtYXNrIHwgKDEgPDwgaSkpCiNkZWZpbmUgb2ZmQml0KG1hc2sgLCBpKSAobWFzayAmICh+KDEgPDwgaSkpKQoKY29uc3QgbG9uZyBsb25nIElORiA9IDFlMTY7CmNvbnN0IGxvbmcgbG9uZyBNT0QgPSAxZTkgKyA3Owpjb25zdCBkYiBFUFMgPSAxZS0xMjsKY29uc3QgaW50IE4gPSAyZTUgKyA3OwoKc3RhdGljIGludCBfbjsKc3RhdGljIHN0ZDo6dmVjdG9yPGJvb2w+IF9hOwpzdGF0aWMgbG9uZyBsb25nIG51bV9xdWVyaWVzOwoKc3RhdGljIGludCBsb25nZXN0X3NlcV9vZl8xcygpewogICAgaW50IGFucyA9IDAsIGN1cnIgPSAwOwogICAgZm9yKGludCBpID0gMDsgaSA8IF9uOyArK2kpewogICAgICAgIGlmKF9hW2ldKXsKICAgICAgICAgICAgKytjdXJyOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBjdXJyID0gMDsKICAgICAgICB9CiAgICAgICAgYW5zID0gc3RkOjptYXgoYW5zLCBjdXJyKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBmbGlwX2JpdHMoY29uc3Qgc3RkOjp2ZWN0b3I8Ym9vbD4gJmZsaXBzKXsKICAgIGFzc2VydCgoaW50KWZsaXBzLnNpemUoKSA9PSBfbik7CiAgICArK251bV9xdWVyaWVzOwogICAgZm9yKGludCBpID0gMDsgaSA8IF9uOyArK2kpCiAgICAgICAgX2FbaV0gPSBmbGlwc1tpXSBeIF9hW2ldOwogICAgcmV0dXJuIGxvbmdlc3Rfc2VxX29mXzFzKCk7Cn0KCm10MTk5MzcgcmQoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCmludCBSYW5kKGludCBsICwgaW50IHIpewogICAgcmV0dXJuIGwgKyByZCgpICUgKHIgLSBsICsgMSk7Cn0KCmJvb2wgY2hlY2soaW50IHN0ICwgaW50IEwgLCBpbnQgY250ICwgaW50IG4pewogICAgdmVjdG9yPGJvb2w+IHRtcDsKICAgIHRtcC5hc3NpZ24obiAsIDApOwoKICAgIGZvciAoaW50IGkgPSAxIDsgaSA8PSBjbnQgOyArK2kpewogICAgICAgIHRtcFtzdF0gPSAxOwogICAgICAgIHN0ICs9IEwgKyAxOwogICAgfQoKICAgIGludCBjdXIgPSBmbGlwX2JpdHModG1wKTsKICAgIGlmIChjdXIgPiBMKXsKICAgICAgICBjdXIgPSBmbGlwX2JpdHModG1wKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICBjdXIgPSBmbGlwX2JpdHModG1wKTsKICAgIHJldHVybiAwOwp9Cgpib29sIENoZWNrKGludCBpZCAsIGludCBMICwgaW50IG4pewogICAgdmVjdG9yPGJvb2w+IHRtcDsKICAgIHRtcC5hc3NpZ24obiAsIDApOwogICAgdG1wW2lkXSA9IDE7CgogICAgaW50IGN1ciA9IGZsaXBfYml0cyh0bXApOwoKICAgIGlmIChjdXIgPiBMKXsKICAgICAgICBjdXIgPSBmbGlwX2JpdHModG1wKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBjdXIgPSBmbGlwX2JpdHModG1wKTsKICAgIHJldHVybiAxOwp9CgpwYWlyPGludCAsIGludD4gZmluZF9sb25nZXN0X3N1YmFycmF5X29mX29uZXMoaW50IG4pewogICAgdmVjdG9yPGJvb2w+IFM7CiAgICBTLmFzc2lnbihuICwgMCk7CiAgICBpbnQgTCA9IGZsaXBfYml0cyhTKTsKICAgIHdoaWxlIChMID4gMTUpewogICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG4gOyArK2kpCiAgICAgICAgICAgIFNbaV0gPSBSYW5kKDAgLCAxKTsKCiAgICAgICAgTCA9IGZsaXBfYml0cyhTKTsKICAgIH0KCiAgICBpZiAoTCA9PSAwKSByZXR1cm4gey0xICwgLTF9OwogICAgaWYgKEwgPT0gbikgcmV0dXJuIHswICwgbiAtIDF9OwoKICAgIGZvciAoaW50IGkgPSAwIDsgaSA8PSBMIDsgKytpKXsKICAgICAgICBpZiAoY2hlY2soaSAsIEwgLCBuIC8gKEwgKyAxKSAsIG4pKXsKICAgICAgICAgICAgaW50IGwgPSAxICwgciA9IG4gLyAoTCArIDEpICwgbWlkICwgcG9zID0gMDsKICAgICAgICAgICAgd2hpbGUgKGwgPD0gcil7CiAgICAgICAgICAgICAgICBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgICAgICAgICBpZiAoY2hlY2soaSArIChsIC0gMSkgKiAoTCArIDEpICwgTCAsIG1pZCAtIGwgKyAxICwgbikpewogICAgICAgICAgICAgICAgICAgIHBvcyA9IG1pZDsKICAgICAgICAgICAgICAgICAgICByID0gbWlkIC0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgbCA9IG1pZCArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG9zID0gaSArIChwb3MgLSAxKSAqIChMICsgMSk7CgogICAgICAgICAgICBTLmFzc2lnbihuICwgMCk7CiAgICAgICAgICAgIFNbcG9zXSA9IDE7CiAgICAgICAgICAgIGludCBMZW5ndGggPSBmbGlwX2JpdHMoUyk7CgogICAgICAgICAgICBsID0gcG9zOwogICAgICAgICAgICB3aGlsZSAobCA+IDAgJiYgQ2hlY2sobCAtIDEgLCBMZW5ndGggLCBuKSkgLS1sOwogICAgICAgICAgICByID0gcG9zOwogICAgICAgICAgICB3aGlsZSAociA8IG4gLSAxICYmIENoZWNrKHIgKyAxICwgTGVuZ3RoICwgbikpICsrcjsKICAgICAgICAgICAgcmV0dXJuIHtsICwgcn07CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpewogICAgZnJlb3BlbigiZGlmbWF4LmlucCIgLCAiciIgLCBzdGRpbik7CiAgICBmcmVvcGVuKCJkaWZtYXgub3V0IiAsICJ3IiAsIHN0ZG91dCk7CiAgICBpbnQgdDsKICAgIHN0ZDo6Y2luID4+IHQ7CgogICAgbG9uZyBsb25nIG1heF9xcyA9IDA7CgogICAgd2hpbGUodC0tKXsKICAgICAgICBudW1fcXVlcmllcyA9IDA7CgogICAgICAgIHN0ZDo6Y2luID4+IF9uOwogICAgICAgIF9hLnJlc2l6ZShfbik7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IF9uOyArK2kpewogICAgICAgICAgICBib29sIHZhbDsKICAgICAgICAgICAgc3RkOjpjaW4gPj4gdmFsOwogICAgICAgICAgICBfYVtpXSA9IHZhbDsKICAgICAgICB9CgogICAgICAgIGF1dG8gW2wsIHJdID0gZmluZF9sb25nZXN0X3N1YmFycmF5X29mX29uZXMoX24pOwogICAgICAgIGlmIChsb25nZXN0X3NlcV9vZl8xcygpID09IDAgJiYgbCA9PSAtMSAmJiByID09IC0xKXsKICAgICAgICAgICAgY291dCA8PCAiMSBcbiI7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBpZihsb25nZXN0X3NlcV9vZl8xcygpICE9IHIgLSBsICsgMSl7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiMFxuIjsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGlmKGwgPT0gMCAmJiByID09IC0xKXsKICAgICAgICAgICAgbWF4X3FzID0gc3RkOjptYXgobnVtX3F1ZXJpZXMsIG1heF9xcyk7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZihyIDwgbCB8fCBsIDwgMCB8fCBsID49IF9uIHx8IHIgPCAwIHx8IHIgPj0gX24pewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIjBcbiI7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgZm9yKGludCBpID0gbDsgaSA8PSByOyArK2kpewogICAgICAgICAgICBpZihfYVtpXSAhPSAxKXsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiMFxuIjsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBtYXhfcXMgPSBzdGQ6Om1heChudW1fcXVlcmllcywgbWF4X3FzKTsKICAgIH0KCiAgICBpZiAobWF4X3FzID4gMTAwKSBjb3V0IDw8IDAgPDwgJ1xuJzsKICAgIGVsc2Ugc3RkOjpjb3V0IDw8ICIxICIgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Ci8vCi8vaW50IG1haW4oKXsKLy8vLyAgICBmcmVvcGVuKCJkaWZtYXguaW5wIiAsICJyIiAsIHN0ZGluKTsKLy8vLyAgICBmcmVvcGVuKCJkaWZtYXgub3V0IiAsICJ3IiAsIHN0ZG91dCk7Ci8vICAgIGZhc3RlcjsKLy8gICAgaW5wKCk7Ci8vICAgIHNvbHZlKCk7Ci8vICAgIHJldHVybiAwOwovL30K