#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;
}
