#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int n,m;
int board[N][N];
int backup[N][N];
void shun(int x,int y,int r)
{
int row = max(x-r,1), col = min(y + r,n);
for (int j = x-r;j <= x + r;++j)
{
if(j >= 1 &&j <= n)
for (int i = y - r;i <= y + r;++i)
{
if (i >= 1 && i <= n)
backup[row][col--] = board[i][j];
if (!col) break;
}
row++;
col = min(y + r, n);
}
}
void ni(int x, int y, int r)
{
int row = min(x + r,n), col = max(1,y-r);
for (int i = x - r;i <= x + r;++i)
{
if(i >= 1 && i <= n)
for (int j = y - r;j <= y + r;++j)
{
if(j >= 1 && j <= n)
backup[row--][col] = board[i][j];
}
col++;
row = min(x+r,n);
}
}
int main()
{
cin >> n >> m;
for (int i = 1;i <= n;++i)
{
for (int j = 1; j <= n;++j)
board[i][j] = (i-1) * n + j;
}
memcpy(backup, board, sizeof board);
while (m--)
{
int x, y, r,z;
cin >> x >> y >> r >> z;
if (!z) shun(x,y,r);
else ni(x,y,r);
memcpy(board, backup, sizeof backup);
}
for (int i = 1;i <= n;++i)
{
for (int j = 1;j <= n;++j)
printf("%d ", board[i][j]);
cout << endl;
}
return 0;
}