#include<iostream>
//#include<fstream>

using namespace std;

//ifstream fin("labyrinth.in");

const int N_MAX = 2005;
const int M_MAX = 2005;

int N, M;

unsigned int poz_init_X, poz_init_Y;
unsigned int poz_finala_X, poz_finala_Y;

unsigned int matrice[N_MAX][M_MAX];

const int di[4] = {-1, 0, 1,  0};

const int dj[4] = {0,  1, 0, -1};

void Citire()
{
    cin >> N >> M;
    cin >> poz_init_X >> poz_init_Y;
    
    cin >> poz_finala_X >> poz_finala_Y;

    for(int i = 0; i < N; i++)
    
        for(int j = 0; j < M; j++)
        
            cin >> matrice[i][j];
}

bool check(int i, int j)
{
     return i >= 0 && i < N && j >= 0 && j < M;
}

void afisare()
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        
            cout << matrice[i][j] << " ";

        cout << "\n";
    }
    cout << "\n\n";
}

void solve(int i, int j, int level)
{
        for(int k = 0; k < 4; k++)
        {

            int i_vecin = i + di[k];
            
            int j_vecin = j + dj[k];
            
            if( check(i_vecin, j_vecin) && !matrice[i_vecin][j_vecin] )
            {
                matrice[i_vecin][j_vecin] = level;
                
                if(i_vecin == poz_finala_X && j_vecin == poz_finala_Y) afisare();
                
                else                            
                    solve(i_vecin, j_vecin, level + 1);
                
                    matrice[i_vecin][j_vecin] = 0;
            }
        }

}

int main()
{
    Citire();
    
    matrice[poz_init_X][poz_init_Y] = 1;
    
    solve(poz_init_X, poz_init_Y, 2);
    
    return 0;
}