#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b, int mod=M) {
int x = 1;
a %= mod;
while (b) {
if (b & 1) x = (x * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
string a;
int consistency1(int n){
int ones = 0;
for(int i=0; i<n; i++) if(a[i] == '1') ones++;
int zeroes = n-ones;
if(ones == zeroes) return n;
unordered_map<int, int> first = {{0, -1}};
unordered_map<int, int> second;
int sum = 0;
int maxLen = 0;
for(int i=0; i<n; i++){
if(a[i] == '0') sum--;
else sum++;
//* Equal 0's and 1's
if(first.count(sum)){
int j = first[sum];
maxLen = max(maxLen, i-j);
}
//* 2 extra 1's in subarray
if(first.count(sum-2)){
int j = first[sum-2];
int zr = (i-j)/2-1;
if(zeroes - zr >= 1) maxLen = max(maxLen, i-j);
}
if(second.count(sum-2)){
int j = second[sum-2];
int zr = (i-j)/2-1;
if(zeroes - zr >= 1) maxLen = max(maxLen, i-j);
}
//* 2 extra 0's in subarray
if(first.count(sum+2)){
int j = first[sum+2];
int ons = (i-j)/2-1;
if(ones - ons >= 1) maxLen = max(maxLen, i-j);
}
if(second.count(sum+2)){
int j = second[sum+2];
int ons = (i-j)/2-1;
if(ones - ons >= 1) maxLen = max(maxLen, i-j);
}
if(!first.count(sum)){
first[sum] = i;
}
else if(!second.count(sum)){
second[sum] = i;
}
}
return maxLen;
}
int maxEqualSubarray(string a, int n){
int ones = 0;
for(int i=0; i<n; i++) if(a[i] == '1') ones++;
int zeroes = n-ones;
if(ones == zeroes) return n;
unordered_map<int, int> mp = {{0, -1}};
int sum = 0;
int maxLen = 0;
for(int i=0; i<n; i++){
if(a[i] == '0') sum--;
else sum++;
//* Equal 0's and 1's
if(mp.count(sum)){
int j = mp[sum];
maxLen = max(maxLen, i-j);
}
//* 2 extra 1's in subarray
if(mp.count(sum-2)){
int j = mp[sum-2];
int zr = (i-j)/2-1;
if(zeroes - zr >= 1) maxLen = max(maxLen, i-j);
}
//* 2 extra 0's in subarray
if(mp.count(sum+2)){
int j = mp[sum+2];
int ons = (i-j)/2-1;
if(ones - ons >= 1) maxLen = max(maxLen, i-j);
}
if(!mp.count(sum)){
mp[sum] = i;
}
}
return maxLen;
}
int consistency2(int n){
string b(a);
reverse(begin(b), end(b));
return max(maxEqualSubarray(a, n) , maxEqualSubarray(b, n));
}
int practice(int n){
return 0;
}
void solve() {
int n;
cin >> a;
n = a.size();
cout << consistency1(n) << " " << consistency2(n) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYiwgaW50IG1vZD1NKSB7CiAgICBpbnQgeCA9IDE7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlIChiKSB7CiAgICAgICAgaWYgKGIgJiAxKSB4ID0gKHggKiBhKSAlIG1vZDsgCiAgICAgICAgYSA9IChhICogYSkgJSBtb2Q7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKLy9fICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIEJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgoKCnN0cmluZyBhOwoKaW50IGNvbnNpc3RlbmN5MShpbnQgbil7CgogICAgaW50IG9uZXMgPSAwOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKSBpZihhW2ldID09ICcxJykgb25lcysrOwogICAgaW50IHplcm9lcyA9IG4tb25lczsKICAgIAogICAgaWYob25lcyA9PSB6ZXJvZXMpIHJldHVybiBuOwogICAgCiAgICB1bm9yZGVyZWRfbWFwPGludCwgaW50PiBmaXJzdCA9IHt7MCwgLTF9fTsKICAgIHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IHNlY29uZDsKICAgIAogICAgaW50IHN1bSA9IDA7CiAgICBpbnQgbWF4TGVuID0gMDsKICAgIAogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBpZihhW2ldID09ICcwJykgc3VtLS07CiAgICAgICAgZWxzZSBzdW0rKzsKICAgICAgICAKICAgICAgICAvLyogRXF1YWwgMCdzIGFuZCAxJ3MgCiAgICAgICAgaWYoZmlyc3QuY291bnQoc3VtKSl7CiAgICAgICAgICAgIGludCBqID0gZmlyc3Rbc3VtXTsKICAgICAgICAgICAgbWF4TGVuID0gbWF4KG1heExlbiwgaS1qKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgLy8qIDIgZXh0cmEgMSdzIGluIHN1YmFycmF5CiAgICAgICAgaWYoZmlyc3QuY291bnQoc3VtLTIpKXsKICAgICAgICAgICAgaW50IGogPSBmaXJzdFtzdW0tMl07CiAgICAgICAgICAgIGludCB6ciA9IChpLWopLzItMTsKICAgICAgICAgICAgaWYoemVyb2VzIC0genIgPj0gMSkJbWF4TGVuID0gbWF4KG1heExlbiwgaS1qKTsKICAgICAgICB9CiAgICAgICAgaWYoc2Vjb25kLmNvdW50KHN1bS0yKSl7CiAgICAgICAgICAgIGludCBqID0gc2Vjb25kW3N1bS0yXTsKICAgICAgICAgICAgaW50IHpyID0gKGktaikvMi0xOwogICAgICAgICAgICBpZih6ZXJvZXMgLSB6ciA+PSAxKQltYXhMZW4gPSBtYXgobWF4TGVuLCBpLWopOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAvLyogMiBleHRyYSAwJ3MgaW4gc3ViYXJyYXkKICAgICAgICBpZihmaXJzdC5jb3VudChzdW0rMikpewogICAgICAgICAgICBpbnQgaiA9IGZpcnN0W3N1bSsyXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGludCBvbnMgPSAoaS1qKS8yLTE7CiAgICAgICAgICAgIGlmKG9uZXMgLSBvbnMgPj0gMSkJCW1heExlbiA9IG1heChtYXhMZW4sIGktaik7CiAgICAgICAgfQogICAgICAgIGlmKHNlY29uZC5jb3VudChzdW0rMikpewogICAgICAgICAgICBpbnQgaiA9IHNlY29uZFtzdW0rMl07CiAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgb25zID0gKGktaikvMi0xOwogICAgICAgICAgICBpZihvbmVzIC0gb25zID49IDEpCQltYXhMZW4gPSBtYXgobWF4TGVuLCBpLWopOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICBpZighZmlyc3QuY291bnQoc3VtKSl7CiAgICAgICAgICAgIGZpcnN0W3N1bV0gPSBpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCFzZWNvbmQuY291bnQoc3VtKSl7CiAgICAgICAgICAgIHNlY29uZFtzdW1dID0gaTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWF4TGVuOwoKfQoKCgoKCgoKCgppbnQgbWF4RXF1YWxTdWJhcnJheShzdHJpbmcgYSwgaW50IG4pewoKICAgIGludCBvbmVzID0gMDsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykgaWYoYVtpXSA9PSAnMScpIG9uZXMrKzsKICAgIGludCB6ZXJvZXMgPSBuLW9uZXM7CiAgICAKICAgIGlmKG9uZXMgPT0gemVyb2VzKSByZXR1cm4gbjsKICAgIAogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gbXAgPSB7ezAsIC0xfX07CiAgICAKICAgIGludCBzdW0gPSAwOwogICAgaW50IG1heExlbiA9IDA7CiAgICAKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAgICAgaWYoYVtpXSA9PSAnMCcpIHN1bS0tOwogICAgICAgIGVsc2Ugc3VtKys7CiAgICAgICAgCiAgICAgICAgLy8qIEVxdWFsIDAncyBhbmQgMSdzIAogICAgICAgIGlmKG1wLmNvdW50KHN1bSkpewogICAgICAgICAgICBpbnQgaiA9IG1wW3N1bV07CiAgICAgICAgICAgIG1heExlbiA9IG1heChtYXhMZW4sIGktaik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIAogICAgICAgIC8vKiAyIGV4dHJhIDEncyBpbiBzdWJhcnJheQogICAgICAgIGlmKG1wLmNvdW50KHN1bS0yKSl7CiAgICAgICAgICAgIGludCBqID0gbXBbc3VtLTJdOwogICAgICAgICAgICBpbnQgenIgPSAoaS1qKS8yLTE7CiAgICAgICAgICAgIGlmKHplcm9lcyAtIHpyID49IDEpCW1heExlbiA9IG1heChtYXhMZW4sIGktaik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vKiAyIGV4dHJhIDAncyBpbiBzdWJhcnJheQogICAgICAgIGlmKG1wLmNvdW50KHN1bSsyKSl7CiAgICAgICAgICAgIGludCBqID0gbXBbc3VtKzJdOwogICAgICAgICAgICAKICAgICAgICAgICAgaW50IG9ucyA9IChpLWopLzItMTsKICAgICAgICAgICAgaWYob25lcyAtIG9ucyA+PSAxKQkJbWF4TGVuID0gbWF4KG1heExlbiwgaS1qKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYoIW1wLmNvdW50KHN1bSkpewogICAgICAgICAgICBtcFtzdW1dID0gaTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWF4TGVuOwoKfQoKCmludCBjb25zaXN0ZW5jeTIoaW50IG4pewoJc3RyaW5nIGIoYSk7CglyZXZlcnNlKGJlZ2luKGIpLCBlbmQoYikpOwoJCglyZXR1cm4gbWF4KG1heEVxdWFsU3ViYXJyYXkoYSwgbikgLCBtYXhFcXVhbFN1YmFycmF5KGIsIG4pKTsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgppbnQgcHJhY3RpY2UoaW50IG4pewoKCiAgICByZXR1cm4gMDsKfQoKCgoKCnZvaWQgc29sdmUoKSB7CiAgICAKICAgIGludCBuOwoKCWNpbiA+PiBhOwoJbiA9IGEuc2l6ZSgpOwogICAgCiAgICBjb3V0IDw8IGNvbnNpc3RlbmN5MShuKSA8PCAgIiAiIDw8IGNvbnNpc3RlbmN5MihuKSA8PCBlbmRsOwoKCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9