#include <bits/stdc++.h>
#define F(i,a,b) for(int i=(a); i<=(b); ++i)
using namespace std;
int n,mp[10][10],dep;
inline void floodfill(int k){
int l=mp[1][1]; mp[1][1]=k;
queue<pair<int,int> > q; q.push(make_pair(1,1));
while(!q.empty()){
int x=q.front().first,y=q.front().second; q.pop();
if(x+1<=n&&mp[x+1][y]==l) mp[x+1][y]=k,q.push(make_pair(x+1,y));
if(y+1<=n&&mp[x][y+1]==l) mp[x][y+1]=k,q.push(make_pair(x,y+1));
}
return;
}
inline bool dfs(int step){
int cnt=0,sum[6]; memset(sum,0,sizeof(sum));
F(i,1,n) F(j,1,n) if(sum[mp[i][j]]==0) ++sum[mp[i][j]],++cnt;
if(cnt==1) return 1;
if(step+cnt-1>dep) return 0;
int t[10][10];
memcpy(t,mp,sizeof(mp));
F(i,0,5){
if(!sum[i]) continue;
floodfill(i);
if(dfs(step+1)) return 1;
memcpy(mp,t,sizeof(t));
}
return 0;
}
int main(){
while(cin>>n && n){
F(i,1,n) F(j,1,n) cin>>mp[i][j];
dep=0; while(!dfs(0)) ++dep; cout<<dep<<'\n';
}
return 0;
}