#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int s,n,map[9][9];
int xx[4]={1,-1,0,0},yy[4]={0,0,-1,1};
bool ans;
bool judans()
{
int t=map[1][1];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(map[i][j]!=t)return 0;
return 1;
}
void change(int a,int b,int x,int y)
{
map[a][b]=y;
for(int i=0;i<4;i++)
{
int nowx=a+xx[i],nowy=b+yy[i];
if(nowx<1||nowy<1||nowx>n||nowy>n)continue;
if(map[nowx][nowy]==x)change(nowx,nowy,x,y);
}
}
void dfs(int now)
{
if(now==s){if(judans())ans=1;return;}
if(ans)return;
for(int c=0;c<=5;c++)
{
int a[9][9];
if(map[1][1]==c) continue;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=map[i][j];
change(1,1,map[1][1],c);
dfs(now+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=a[i][j];
}
}
int main()
{
while(1)
{
scanf("%d",&n);ans=0;
if(n==0)break;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&map[i][j]);
for(s=0;;s++)
{
dfs(0);
if(ans){printf("%d\n",s);break;}
}
}
return 0;
}