#include <iostream>
#include <fstream>
#include <windows.h>
using namespace std;

int main()
{
    int N,K,bri=0,broj=0,sx=0,sy=0,kx=0;
    ifstream input;
    ofstream output;
    input.open("input.txt");
    output.open("output.txt");
    input>>N>>K;
    output<<N<<K<<endl;
    int n[N][N];
    bool lev=true;
    bool dole=true,skip=false;
    for(int x=0;x<N;x++)
        for(int y=0;y<N;y++)
        {
            input>>n[x][y];
        }

    int brg=n[0][0],ky;
    for(int x=0;x<N;x++){
        for(int y=0;y<N;y++)
        {
            cout<<n[x][y];
        }
        cout<<endl;
        }
    start:
        skip=false;
        kx=0;
        ky=0;
        bri=0;
        lev=true;
        dole=true;
    while(lev)
    {
        if(sx+1==N)break;
        else if(n[sx+1][sy]!=brg)break;
        else n[sx][sy]=0;
        sx++;
        kx++;
    }
    while(dole)
    {
        if(sy+1==N)break;
        for(int i=0;i<=kx;i++)
        {
            if(n[sx-kx+i][sy+1]!=brg)
            {
                dole=false;
                sy--;
                ky--;
                break;
            }
            else n[sx-kx+i][sy]=0;
        }
        if(n[sx][sy+1]!=brg)
            {
                break;
            }
            else n[sx][sy]=0;
        sy++;
        ky++;
    }
    if(kx==0 && ky==0)n[sx][sy]=0;
    for(int x=0;x<N;x++){
        for(int y=0;y<N;y++)
        {
            cout<<n[x][y];
        }
        cout<<endl;
        }
        cout<<"kx="<<broj<<" sy="<<brg<<endl;

        Sleep(1500);
            int x1=0,y1=0;
    for(int x=0;x<N;x++)
        {
            for(int y=0;y<N;y++)
                {
                    if(n[x][y]!=0)bri++;
                    if(n[x][y]==brg && skip==false)
                    {
                        skip=true;
                        x1=0,y1=0;
                        while(1)
                        {
                            if(n[x1][y1]!=0)
                            {
                                brg=n[x1][y1];
                                break;
                            }
                            if(x1+1!=N) x1++;
                            else
                            {
                                x1=0;
                                y1++;
                            }
                        }
                        sx=x1;
                        sy=y1;
                        n[x][y]=0;
                    }
                    if(skip && n[x][y]==brg)n[x][y]=0;
                }
        }
    if(skip)goto start;
    broj++;
    if(!bri)goto kraj;
    x1=0,y1=0;
    while(1)
    {
        if(n[x1][y1]!=0)
        {
            brg=n[x1][y1];
            break;
        }
        if(x1+1!=N) x1++;
        else
        {
            x1=0;
            y1++;
        }
    }
    sx=x1;
    sy=y1;
    goto start;
    kraj:
    input.close();
    output.close();
    cout<<broj<<endl;
    return 0;
}