#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned long long
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define pll pair<LL,LL>
#define x first
#define y second
#define pi acos(-1)
#define sqr(x) ((x)*(x))
#define pdd pair<double,double>
#define MEMS(x) memset(x,-1,sizeof(x))
#define MEM(x) memset(x,0,sizeof(x))
#define less Less
#define EPS 1e-4
#define arg ARG
#define cpdd const pdd
#define rank Rank
#define KK 500
#define N 100005
#define MXN 2000005
set<pii> dp[1005][1005];
int main(){
    int n;
    scanf("%d",&n);
    char c[1005][20];
    int len[1005];
    vector<int> v[2];
    for(int i =0;i<n;i++){
        scanf("%s",c[i]);
        v[c[i][0]-'0'].pb(i);
        len[i]=strlen(c[i]);
    }
    queue<pair<int,pair<pii,pii> > > q;
    for(int t=0;t<2;t++){
        for(int i = 0;i<v[t].size();i++){
            for(int j=i+1;j<v[t].size();j++){
                q.push(mp(1,mp(mp(v[t][i],0),mp(v[t][j],0))));
                dp[v[t][i]][v[t][j]].insert(mp(0,0));
            }
        }
    }
    while(!q.empty()){
        auto p=q.front();
        q.pop();
    //    printf("%d %d %d %d %d\n",p.y.x.x,p.y.x.y,p.y.y.x,p.y.y.y,p.x);
        if(len[p.y.x.x]-1==p.y.x.y&&len[p.y.y.x]-1==p.y.y.y){
            printf("%d\n",p.x);
            return 0;
        }
        else if(len[p.y.x.x]-1==p.y.x.y)
        {
            p.y.y.y++;
            p.x++;
            for(auto it:v[c[p.y.y.x][p.y.y.y]-'0']){
                int a=it,b=0;
                int tag=0;
                if(a>p.y.y.x){
                    swap(p.y.y.x,a);
                    swap(p.y.y.y,b);
                    tag=1;
                }
                if(dp[a][p.y.y.x].find(mp(b,p.y.y.y))==dp[a][p.y.y.x].end()){
                    dp[a][p.y.y.x].insert(mp(b,p.y.y.y));
                    q.push(mp(p.x,mp(mp(a,b),mp(p.y.y.x,p.y.y.y))));
                }
                if(tag){
                    swap(p.y.y.x,a);
                    swap(p.y.y.y,b);
                }
            }
        }
        else if(len[p.y.y.x]-1==p.y.y.y){
            p.y.x.y++;
            p.x++;
            for(auto it:v[c[p.y.x.x][p.y.x.y]-'0']){
                int a=it,b=0;
                int tag=0;
                if(a<p.y.x.x){
                    swap(a,p.y.x.x);
                    swap(p.y.x.y,b);
                    tag=1;
                }
                if(dp[p.y.x.x][a].find(mp(p.y.x.y,b))==dp[p.y.x.x][a].end()){
                    dp[p.y.x.x][a].insert(mp(p.y.x.y,b));
                    q.push(mp(p.x,mp(p.y.x,mp(a,b))));
                }
                if(tag){
                    swap(a,p.y.x.x);
                    swap(p.y.x.y,b);
                }
            }
        }
        else{
            if(c[p.y.y.x][p.y.y.y+1]==c[p.y.x.x][p.y.x.y+1]){
                p.x++;
                p.y.y.y++;
                p.y.x.y++;
                if( dp[p.y.y.x][p.y.x.x].find(mp(p.y.y.y,p.y.x.y))==dp[p.y.y.x][p.y.x.x].end()){
                    dp[p.y.y.x][p.y.x.x].insert(mp(p.y.y.y,p.y.x.y));
                    q.push(p);
                }
            }
        }
    }
    printf("0\n");
    return 0;
}


Measured memory_bytes: 126172