#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=3e5+5;
int n,cnt;
int a[maxn];
struct disease{int l,r,sum,ts;}p[maxn];
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++){
char x;
cin>>x;
a[i]=x-'0';
}
for(int i=0;i<=n;i++){
if(a[i]==0 && a[i+1]==1) p[++cnt].l=i+1;
else if(a[i]==1 && a[i+1]==0) p[cnt].r=i;
}
int o1,o2;
o1=o2=0;
for(int i=1;i<=cnt;i++) {
if(p[i].l==1 && p[i].r==n){
if(n%2) cout<<1<<endl;
else cout<<2<<endl;
return 0;
}
p[i].sum=p[i].r-p[i].l+1;
p[i].ts=(p[i].sum+1)/2;
o1+=p[i].ts;
o2++;
}
int x=o1/o2;
int ans=INF,zcans=0;
for(int i=1;i<=cnt;i++){
if(p[i].l==1){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].r==n){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].ts<x){
zcans=INF;
break;
}
zcans+=abs(p[i].ts-x)*2;
if(p[i].sum%2==0) zcans+=2;
else zcans++;
}
ans=min(ans,zcans);
x++;
zcans=0;
for(int i=1;i<=cnt;i++){
if(p[i].l==1){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].r==n){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].ts<x){
zcans=INF;
break;
}
zcans+=abs(p[i].ts-x)*2;
if(p[i].sum%2==0) zcans+=2;
else zcans++;
}
ans=min(ans,zcans);
x-=2;
zcans=0;
for(int i=1;i<=cnt;i++){
if(p[i].l==1){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].r==n){
if(p[i].sum<x){
zcans=INF;
break;
}
if(x<=p[i].sum) zcans++;
else zcans+=p[i].sum;
continue;
}
if(p[i].ts<x){
zcans=INF;
break;
}
zcans+=abs(p[i].ts-x)*2;
if(p[i].sum%2==0) zcans+=2;
else zcans++;
}
ans=min(ans,zcans);
if(ans==INF){
ans=0;
for(int i=1;i<=n;i++) ans+=a[i];
}
cout<<ans<<endl;
return 0;
}