#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int b[510][510];
int x, y, r, z;
int a[505][505], k = 1;
void xuanzhuan1()//顺时针
{
int h = x - 1, l = y + 1;//2*r+1阶矩阵的头坐标
int q = 2*r + 1;//头坐标的总行数
for (int k = 1; k <= q/2;++k) {
int i = h;
for (int j = i; j <= l; j++) //从左到右
b[j][l] = a[i][j];
for (int j = i; j <= l; j++)//从上到下
b[l][l - j+i ] = a[j][l];
for (int j = l; j >= i; j--)//从右到左
b[j][i] = a[l][j];
for (int j = l; j >= i; j--)//从下到上
b[i][l - j+i ] = a[j][i];
h = h - 1;
l=l + 1;
}
}
void xuanzhuan2() //逆时针
{
int h = x - 1, l = y + 1;//2*r+1阶矩阵的头坐标
int q = 2 * r + 1;//头坐标的总行数
for (int k = 1; k <= q/2; ++k)
{
int i = h;
for (int j = i; j <= l ; j++) //从左到右 j:1 2 3
b[l - j + i][i] = a[i][j];
for (int j = i; j <= l ; j++)//从上到下 j:1 2 3
b[i][j] = a[j][l]; //l
for (int j = l ; j >= i; j--)//从右到左 j:3 2 1
b[l - j + i][l] = a[l][j];
for (int j = l; j >= i; j--)//从下到上 j:3 2 1
{
b[l][j] = a[j][i];
}
h=h - 1;
l=l + 1;
}
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)//数组放进去
{
for (int j = 1; j <= n; j++)
{
a[i][j] = k;
b[i][j]=k;
k++;
}
}
//for (int i = 1; i <= n; i++)//数组放进去
//{
// for (int j = 1; j <= n; j++)
// {
// cout << a[i][j] << '\t' ;
// }
// cout << endl;
//}
for (int i = 0; i < m; i++)
{
cin >> x >> y >> r >> z;
if (z == 0)//顺时针
xuanzhuan1();
else if (z == 1)
xuanzhuan2();
for (int i = 1; i <= n; i++)//数组放进去
{
for (int j = 1; j <= n; j++)
{
a[i][j] = b[i][j];
}
}
}
for (int i = 1; i <= n; i++)//数组放进去
{
for (int j = 1; j <= n; j++)
{
cout << b[i][j] << ' ';
}
cout << endl;
}
}