#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=20;
int n,k,p;
bool edge[N][N][N][N];
int d1[8]={-1,-1,0,1,1,1,0,-1},d2[8]={0,1,1,1,0,-1,-1,-1};
int s[N][N];
bool h[N][N];
bool f;
string path,ans;
void dfs(int i,int j,int num){
if(f)return;//只要找到答案直接退出
h[i][j]=1;//这个位置一定循环外面,因为循环里面是各个方向的尝试,外面是节点
if(i==n-1&&j==n-1&&num==n*n)
{
f=1;
ans=path;
return;
}
for(int p=0;p<8;p++){
int a=i+d1[p];int b=j+d2[p];
if(a<0||b<0||a>=n||b>=n)continue;
if(h[a][b])continue;
if(edge[a][j][i][b]||edge[i][b][a][j])continue;
if(s[a][b]!=(s[i][j]+1)%k)continue;
edge[i][j][a][b]=1;
edge[a][b][i][j]=1;
path+=p+'0';
num++;
dfs(a,b,num);
edge[i][j][a][b]=0;
edge[a][b][i][j]=0;
num--;
path.pop_back();
h[a][b]=0;
}
}
int main(){
cin>>n>>k;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>s[i][j];
dfs(0,0,1);
if(f)cout<<ans;
else cout<<-1;
}