#include <bits/stdc++.h>
using namespace std;
long long n,x,a[20][20],t[20][20],p[20][20],len[20],se[20],f[1100][12][12][12][12],ans=1e18;
long long check(long long x,long long y)
{
if((se[x]&se[y])!=se[y])return 1e18;
long long now=p[y][a[x][len[x]]];
for(int i=len[x]-1;i>=1;i--)
if(now==0)return i+1;
else if(p[y][a[x][i]]>now)return i;
else now=p[y][a[x][i]];
return 0;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)
while(scanf("%lld",&x)&&x)a[i][++len[i]]=x,p[i][x]=len[i],se[i]|=(1<<(x-1));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)t[i][j]=check(i,j);
else t[i][j]=1e18;
for(int s=0;s<(1<<n);s++)
for(int i=1;i<=n+1;i++)
for(int l=len[i];l>=0;l--)
for(int j=1;j<=n+1;j++)
for(int r=1;r<=len[j]+1;r++)
f[s][i][l][j][r]=1e18;
f[0][n+1][0][n+1][1]=0;
for(int i=1;i<=n;i++)f[1<<(i-1)][i][len[i]][n+1][1]=0;
for(int s=0;s<(1<<n);s++)
for(int i=1;i<=n+1;i++)
for(int l=len[i];l>=0;l--)
for(int j=1;j<=n+1;j++)
for(int r=1;r<=len[j]+1;r++)
{
if(f[s][i][l][j][r]>=1e18)continue;
if(s==(1<<n)-1&&l==0&&r==len[j]+1)ans=min(ans,f[s][i][l][j][r]);
for(int k=1;k<=n;k++)
{
if((s>>(k-1))&1)continue;
if(i!=n+1&&l==0)
for(long long x=t[k][i];x<=len[k];x++)f[s|(1<<(k-1))][k][x][j][r]=min(f[s|(1<<(k-1))][k][x][j][r],f[s][i][l][j][r]);
if(j==n+1||r>t[j][k])f[s|(1<<(k-1))][i][l][k][1]=min(f[s|(1<<(k-1))][i][l][k][1],f[s][i][l][j][r]);
}
if(i!=n+1&&l==0)f[s][n+1][0][j][r]=min(f[s][n+1][0][j][r],f[s][i][l][j][r]);
for(int k=1;k<=9;k++)
{
long long pl=0,pr=1;
if(i==n+1)pl=0;
else if(p[i][k]==0||p[i][k]>l)continue;
else pl=l-(a[i][l]==k);
if(j==n+1)pr=1;
else if(p[j][k]==0||p[j][k]>r)continue;
else pr=r+(a[j][r]==k);
f[s][i][pl][j][pr]=min(f[s][i][pl][j][pr],f[s][i][l][j][r]+1);
}
}
if(ans==1e18)printf("-1\n");
else printf("%lld\n",ans);
return 0;
}