using namespace std;
const int N = 1e5 + 10;
int p[N];
int main()
{
int n;
string s;
cin >> n >> s;
int cnt = 0;
for(int i = 0; i < s.size(); i ++)
{
if(s[i]=='1')
{
p[cnt ++] = i;
}
}
//如果开始一头牛都没有,则直接输出答案
if(!cnt)
{
printf("%d",n - 1);
return 0;
}
//预处理牛和牛之间的最小距离
int mi = INT_MAX;
for(int i = 0; i < cnt - 1; i ++)
{
mi = min(mi, p[i + 1] - p[i]);
}
//如果把两牛放在一个区间里
int y = max(p[0] / 2, (n - p[cnt - 1]) / 2);
for(int i = 0; i < cnt - 1; i ++)
{
y = max((p[i + 1] - p[i] )/ 3, y);
}
//如果把两牛放在两个区间里
int y1 = p[0], y2 = n - p[cnt - 1];
if(y2 > y1)swap(y1, y2);
for(int i = 0; i < cnt - 1; i ++)
{
int d = (p[i + 1] - p[i]) / 2;
if(d >= y1 )y2 = y1, y1 = d;
else if(d > y2)y2 = d;
}
printf("%d",min(mi, max(y,y2)));
}