#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<climits>
#include<numeric>
#include<set>
#include<sstream>
#include<map>
#include<vector>
#include<string>
#include<regex>
using namespace std;
const long long MOD = (long long)(1e9 + 7);
vector<string> split(const string& haystack, const string& needle) {
vector<string> result;
size_t start_pos = 0;
size_t found_pos = haystack.find(needle, start_pos);
while (found_pos != string::npos) {
size_t count = found_pos - start_pos;
string token = haystack.substr(start_pos, count);
if (!token.empty()) {
result.push_back(token);
}
start_pos = found_pos + needle.length();
found_pos = haystack.find(needle, start_pos);
}
string last_token = haystack.substr(start_pos);
if (!last_token.empty()) {
result.push_back(last_token);
}
return result;
}
int main() {
string s;cin >> s;
int max_length = 0;
map<int, int> prefix;
int sum = 0;
for (int i = 0;i < s.length();i++) {
if (s[i] == '1') {
sum++;
}
else {
sum--;
}
if (prefix.find(sum) != prefix.end()) {
max_length = max(max_length, i - prefix[sum]);
}
else {
prefix[sum] = i;
}
if (sum == 0) {
max_length = max(max_length, i + 1);
}
}
cout << max_length;
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGlvbWFuaXA+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPG51bWVyaWM+CiNpbmNsdWRlPHNldD4KI2luY2x1ZGU8c3N0cmVhbT4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8cmVnZXg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgbG9uZyBsb25nIE1PRCA9IChsb25nIGxvbmcpKDFlOSArIDcpOwoKdmVjdG9yPHN0cmluZz4gc3BsaXQoY29uc3Qgc3RyaW5nJiBoYXlzdGFjaywgY29uc3Qgc3RyaW5nJiBuZWVkbGUpIHsKCXZlY3RvcjxzdHJpbmc+IHJlc3VsdDsKCXNpemVfdCBzdGFydF9wb3MgPSAwOwoJc2l6ZV90IGZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwoJd2hpbGUgKGZvdW5kX3BvcyAhPSBzdHJpbmc6Om5wb3MpIHsKCQlzaXplX3QgY291bnQgPSBmb3VuZF9wb3MgLSBzdGFydF9wb3M7CgkJc3RyaW5nIHRva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0X3BvcywgY291bnQpOwoJCWlmICghdG9rZW4uZW1wdHkoKSkgewoJCQlyZXN1bHQucHVzaF9iYWNrKHRva2VuKTsKCQl9CgkJc3RhcnRfcG9zID0gZm91bmRfcG9zICsgbmVlZGxlLmxlbmd0aCgpOwoJCWZvdW5kX3BvcyA9IGhheXN0YWNrLmZpbmQobmVlZGxlLCBzdGFydF9wb3MpOwoJfQoKCXN0cmluZyBsYXN0X3Rva2VuID0gaGF5c3RhY2suc3Vic3RyKHN0YXJ0X3Bvcyk7CglpZiAoIWxhc3RfdG9rZW4uZW1wdHkoKSkgewoJCXJlc3VsdC5wdXNoX2JhY2sobGFzdF90b2tlbik7Cgl9CglyZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpIHsKCXN0cmluZyBzO2NpbiA+PiBzOwoJaW50IG1heF9sZW5ndGggPSAwOwoJbWFwPGludCwgaW50PiBwcmVmaXg7CglpbnQgc3VtID0gMDsKCWZvciAoaW50IGkgPSAwO2kgPCBzLmxlbmd0aCgpO2krKykgewoJCWlmIChzW2ldID09ICcxJykgewoJCQlzdW0rKzsKCQl9CgkJZWxzZSB7CgkJCXN1bS0tOwoJCX0KCgkJaWYgKHByZWZpeC5maW5kKHN1bSkgIT0gcHJlZml4LmVuZCgpKSB7CgkJCW1heF9sZW5ndGggPSBtYXgobWF4X2xlbmd0aCwgaSAtIHByZWZpeFtzdW1dKTsKCQl9CgkJZWxzZSB7CgkJCXByZWZpeFtzdW1dID0gaTsKCQl9CgoJCWlmIChzdW0gPT0gMCkgewoJCQltYXhfbGVuZ3RoID0gbWF4KG1heF9sZW5ndGgsIGkgKyAxKTsKCQl9Cgl9Cgljb3V0IDw8IG1heF9sZW5ndGg7CglyZXR1cm4gMDsKfQoK