#include<bits/stdc++.h>
using namespace std;
typedef  long long ll;
typedef ll TP;
const ll LINF = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int MAXN =4e6+15;
const double PI=acos(-1);
void test() { cerr << "\n"; }
template <typename T,typename...Args>void test(T x,Args...args){cerr<<x<<" ";test(args...); }
inline ll qpow(ll a, ll b) {return b?((b&1)?a*qpow(a*a%MOD,b>>1)%MOD : qpow(a*a%MOD,b>>1))%MOD :1; }
inline ll qpow(ll a, ll b, ll c) {return b?((b&1)?a*qpow(a*a%c,b>>1)%c : qpow(a*a%c,b>>1)) % c: 1; }
inline ll gcd(ll a, ll b){return b?gcd(b,a% b): a; }
namespace Fast_IO
{ //orz laofu
    const int MAXL((1 << 18) + 1);
    char _io_ibuf[MAXL], *_io_iS, *_io_iT, _io_obuf[MAXL];
    char *_io_oS = _io_obuf, *_io_oT = _io_obuf + MAXL - 1, _io_c, _io_st[55];
    int _io_f, _io_tp;
    char Getchar(){
        if (_io_iS == _io_iT){
            _io_iS = _io_ibuf;_io_iT=_io_iS+fread(_io_ibuf,1,MAXL,stdin);
            return (_io_iS == _io_iT ? EOF : *_io_iS++);
        }else return (*_io_iS++);
    }
    void Write(){fwrite(_io_obuf,1,_io_oS-_io_obuf,stdout);_io_oS=_io_obuf;}
    void Putchar(char x){*_io_oS++ = x;if (_io_oS == _io_oT)Write();}
    inline int read(){
        int x=0;
        for(_io_f=1,_io_c=Getchar();_io_c<'0'||_io_c>'9';)_io_f=_io_c=='-'?-1:1,_io_c=Getchar();
        for(x=0;_io_c<='9'&&_io_c>='0';_io_c=Getchar())x=(x<<3)+(x<<1)+(_io_c^48);
        return x*_io_f;
    }
    inline long long read_ll(){
        long long x = 0;
        for(_io_f=1,_io_c=Getchar();_io_c<'0'||_io_c> '9';)_io_f=_io_c=='-'?-1:1,_io_c=Getchar();
        for(x=0;_io_c<='9'&&_io_c>='0';_io_c=Getchar())x=(x<<3)+(x<<1)+(_io_c^48);
        return x * _io_f;
    }
    template <class Int>
    void Print(Int x, char ch = '\0'){
        if (!x)Putchar('0');if (x < 0)Putchar('-'),x=-x;
        while(x)_io_st[++_io_tp]=x % 10 + '0', x /= 10;
        while(_io_tp)Putchar(_io_st[_io_tp--]);
        if (ch)Putchar(ch);
    }
    void Getstr(char *s, int &l){
        for(_io_c=Getchar();_io_c <'a'||_io_c>'z';)_io_c=Getchar();
        for(l=0;_io_c<='z'&&_io_c>='a';_io_c=Getchar())s[l++]=_io_c;
        s[l] = 0;
    }
    void Putstr(const char *s){for(int i=0,n=strlen(s);i<n;++i)Putchar(s[i]);}
} // namespace Fast_IO
using namespace Fast_IO;
int trie[MAXN][2],vis[MAXN],cntN,End[MAXN],cntS;
char str[22];
struct QNode
{
    int val,id;
    bool operator<(const QNode R)const
    {
        return val>R.val;
    }
};
priority_queue<QNode>pq;
int dp[MAXN];
void Insert(char *s)
{
    int now=0;
    for(int i=0;s[i];i++)
    {
        if(trie[now][s[i]-'0']==0)trie[now][s[i]-'0']=++cntN;
        now=trie[now][s[i]-'0'];
    }
    vis[now]=1;End[++cntS]=now;
    pq.push({strlen(s),now});
}
void dfs(int u,int dep,int now,bool f)
{
    if(vis[u]&&dp[now]>dep&&f){

        dp[now]=dep;pq.push({dep,now});
       // printf("%d %d\n",now,dp[now]);
    }
    if(vis[now]&&dp[u]>dep&&f)
    {
        dp[u]=dep;pq.push({dep,u});
    }
    if(trie[u][0])
    {
        if(trie[now][0])dfs(trie[u][0],dep+1,trie[now][0],1);
        if(vis[now]&&trie[0][0])dfs(trie[u][0],dep+1,trie[0][0],1);
    }
    if(trie[u][1])
    {
        if(trie[now][1])dfs(trie[u][1],dep+1,trie[now][1],1);
        if(vis[now]&&trie[0][1])dfs(trie[u][1],dep+1,trie[0][1],1);
    }
}
int get()
{
    memset(dp,0x3f,sizeof( dp));
    while(!pq.empty())
    {

        QNode tmp=pq.top();pq.pop();
        if(tmp.val>dp[tmp.id])continue;
        if(dp[tmp.id]!=0x3f3f3f3f&&vis[tmp.id])return dp[tmp.id];
      //  printf("%d %d %d\n",tmp.id,tmp.val,dp[tmp.id]);
        dfs(tmp.id,tmp.val,0,0);
    }

    return 0;
}

void work()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",str);
        Insert(str);
    }
    printf("%d\n",get());
}
int main()
{
   //std::ios::sync_with_stdio(false);
    //int T=read();for(int cas=1;cas<=T;cas++)
 // int T;scanf("%d",&T);for(int cas=1;cas<=T;cas++)
    work();
   // Write();
}
/**
9
2 1
3 1
1 2
4 2
1 3
4 3
2 4
3 4
2 2
*/



Measured memory_bytes: 18964