// 题意:有20个只有0和1的数字,如果改变(取反)第i个数字,则相邻的两个数也会跟着改变。
// 求使得这20个数字全部变为0的最少步骤
#include <iostream>        //BFS
using namespace std;
const int MAXN=1<<20;
int q[MAXN],dis[MAXN],vis[MAXN];
void bfs(int x)
{
    q[0]=x;
    dis[0]=0;
    vis[x]=1;
    int u,front,rear;
    front=0;rear=1;
    while(front<rear)
    {
        u=q[front];
        if(u==0)
        {
            printf("%d\n",dis[front]);
            break;
        }
        for(int i=0;i<20;++i)
        {
            int t=u;
            t^=1<<i;
            if(i>0)
                t^=1<<(i-1);
            if(i<19)
                t^=1<<(i+1);
            if(!vis[t])
            {
                vis[t]=1;
                dis[rear]=dis[front]+1;
                q[rear++]=t;
            }
        }
        front++;
    }
}
int main()
{
    int x=0,b;
    for(int i=0;i<20;++i)
    {
        scanf("%d",&b);
        if(b)
            x+=(1<<i);
    }
    bfs(x);
    return 0;
}
#include <iostream>        //DFS
using namespace std;
int cnt,res;
void dfs(int x,int i)
{
    if(cnt>=res)
        return;
    if(i==20)
    {
        if(x==0)
            res=min(res,cnt);
        return;
    }
    dfs(x,i+1);
    x^=1<<i;
    if(i>0)
        x^=1<<(i-1);
    if(i<19)
        x^=1<<(i+1);
    cnt++;
    dfs(x,i+1);
    cnt--;
}
int main()
{
    int x=0,b;
    for(int i=0;i<20;++i)
    {
        scanf("%d",&b);
        if(b)
            x+=(1<<i);
    }
    res=21;
    dfs(x,0);
    printf("%d\n",res);
    return 0;
}