#include <bits/stdc++.h>
int max(int a, int b) { return a > b ? a : b; }
char s[101000];
int a[101000], g[101000][2], f[101000][2], F[101000][2];
int main() {
  int n;
  scanf("%d", &n);
  scanf("%s", s);
  for (int i = 0; i < n; i++) a[i] = s[i] - '0';
  g[0][1 - a[0]] = 1;
  f[0][0] = 1;
  f[0][1] = 1;
  F[0][a[0]] = 1;
  for (int i = 1; i < n; i++) {
    F[i][0] = F[i - 1][0];
    F[i][1] = F[i - 1][1];
    F[i][a[i]] = max(F[i][a[i]], F[i - 1][1 - a[i]] + 1);
  }
  for (int i = 1; i < n; i++) {
    if (a[i] == 1) {
      g[i][0] = max(g[i - 1][1] + 1, g[i - 1][0]);
      g[i][0] = max(F[i - 1][0], g[i][0]);
      g[i][0] = max(F[i - 1][1] + 1, g[i][0]);
      g[i][1] = g[i - 1][1];
      g[i][1] = max(g[i][1], F[i - 1][1]);
    } else {
      g[i][0] = g[i - 1][0];
      g[i][1] = max(g[i - 1][0] + 1, g[i - 1][1]);
      g[i][0] = max(g[i][0], F[i - 1][0]);
      g[i][1] = max(g[i][1], max(F[i - 1][1], F[i - 1][0] + 1));
    }
    if (a[i] == 1) {
      f[i][0] = max(f[i - 1][0], g[i][0]);
      f[i][1] = max(f[i - 1][0] + 1, g[i][1]);
      f[i][1] = max(f[i][1], f[i - 1][1]);
    } else {
      f[i][0] = max(f[i - 1][1] + 1, g[i][0]);
      f[i][1] = max(f[i - 1][1], g[i][1]);
      f[i][0] = max(f[i][0], f[i - 1][0]);
    }
  }
  printf("%d\n", max(f[n - 1][0], f[n - 1][1]));
  return 0;
}
