#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[1000000];
int main()
{
int n;
while(~scanf("%d",&n))
{
int output=1;
scanf("%s",a);
int maxn=0;
int contz=1;
int cont2=0;
for(int i=0;i<n-1;i++)
{
if(a[i]==a[i+1])
{
contz++;
}
else
{
if(contz==2)cont2++;
contz=1,output++;
}
maxn=max(contz,maxn);
}
if(contz==2)cont2++;
if(maxn>=3)output+=2;
if(maxn==2&&cont2>1)output+=2;
if(maxn==2&&cont2==1)output+=1;
printf("%d\n",output);
}
}
#include <iostream>
using namespace std ;
int main()
{
int n, num = 1, maxr = 1;
cin>>n;
int *r = new int[n];//创建长为n的数组
int *r1 = new int[n];//备用数组
for (int i = 0; i < n; i++)
{
cin>>r[i];//写入数字
}
for (int i = 0; i < n; i++)
{
r1[i] = r[i];//从原数组中复制第i个数字,以防止原数组在计算过程中被改变
for (int j = i+1; j < n; j++)
{
r1[j] = r[j];//从原数组中复制第j个数字
if (r1[i]+1 == r1[j])//判断相邻两数字是否递增1
{
num = num + 1;//递增1子序列的长度
r1[i] = r1[j];
}
}
if (num > maxr)//更新递增1子序列的长度
{
maxr = num;
}
num = 1;
}
cout<<n-maxr<<endl;
system("PAUSE");
}