func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxN(1e5 + 10);   typedef int i_N[maxN];   int N, Gx[maxN][2], Fx[maxN][2][2];   i_N A;   string S;   int main() {     scanf( %d n , &N);     getline(cin, S);     for (int i = 0; i < (int)S.size(); i++) A[i + 1] = S[i] ==  1 ;     A[0] = A[N + 1] = -1;     for (int i = N; i; i--) {       Gx[i][0] = Gx[i + 1][0];       Gx[i][1] = Gx[i + 1][1];       if (A[i] == 0)         Gx[i][0] = max(Gx[i][0], Gx[i + 1][1] + 1);       else         Gx[i][1] = max(Gx[i][1], Gx[i + 1][0] + 1);     }     int ans(0);     for (int i = 1; i <= N; i++) {       for (int j = 0; j < 2; j++)         for (int k = 0; k < 2; k++) Fx[i][j][k] = Fx[i - 1][j][k];       if (A[i] == 0) {         Fx[i][0][0] = max(Fx[i][0][0], Fx[i - 1][1][0] + 1);         Fx[i][1][1] = max(Fx[i][1][1], max(Fx[i - 1][0][0], Fx[i - 1][0][1]) + 1);       } else {         Fx[i][1][0] = max(Fx[i][1][0], Fx[i - 1][0][0] + 1);         Fx[i][0][1] = max(Fx[i][0][1], max(Fx[i - 1][1][0], Fx[i - 1][1][1]) + 1);       }       ans = max(ans, max(Fx[i][0][1] + Gx[i + 1][1], Fx[i][1][1] + Gx[i + 1][0]));     }     cout << ans;   }   