1.Long Inversions
void solve(){
int n; cin >> n;
string s; cin >> s;
s = ' '+s;
int ans = 1;
for(int k=n; k>=2; k--){
vector<int> dif(n+k+1, 0);
for(int i=1; i<=n && i+k-1<=n; i++){
dif[i] = (dif[i]+dif[i-1]+2)%2;
if(dif[i] == 1){
if(s[i] == '1') dif[i]++, dif[i+k]--;
}else{
if(s[i] == '0') dif[i]++, dif[i+k]--;
}
dif[i] %= 2;
}
for(int i=n-k+2; i<=n; i++){
dif[i] = (dif[i-1]+dif[i]+2)%2;
}
for(int i=1; i<=n; i++){
if(dif[i]==1 && s[i]=='1') goto lable;
if(dif[i]==0 && s[i]=='0') goto lable;
}
ans = k;
break;
lable: ;
}
cout << ans << endl;
}
2. Digital string maximization
void solve(){
int n; cin >> n;
string s; cin >> s;
set<int> q;
int end = sqrt(n)+1;
for(int i=1; i<=end; i++){
if(n%i == 0){
q.insert(i);
q.insert(n/i);
}
}
for(auto &x: q){
int cntr = 0, cntl = 0, pl = 0, pr = n-x;
for(int k=0; k<n; k++){
if(s[pl] != s[k]){
cntl++;
}
if(s[pr] != s[k]){
cntr++;
}
if(cntl>1 && cntr>1) break;
pl = (pl+1)%x;
pr = n-x+pl;
}
if(cntl < 2 || cntr < 2){
cout << x << endl;
return;
}
}
}
3.Digital string maximization
void solve(){
string s; cin >> s;
int n = s.size();
for(int i=0; i<n; i++){
int now = s[i]-'0';
for(int k=0; k<now && i-k-1>=0; k++){
if(s[i-k]-1 > s[i-k-1]){
s[i-k]--;
swap(s[i-k-1], s[i-k]);
}
}
}
cout << s << endl;
}
4. Adjacent Digit Sums
void solve(){
int l, r; cin >> l >> r;
if(l == r-1){
cout << "YES" << endl;
}else{
int last = r-1-l;
if(last > 0){
cout << "NO" << endl;
return;
}
if(last % 9 == 0){
cout << "YES" << endl;
}else{
cout << "NO" << endl;
}
}
}