Orz
////IzayoiAster////
#include<cstdio>
#include<iostream>
#include<cstdlib>
#define maxn 508
using namespace std;
int n, m, a[maxn][maxn], b[maxn][maxn];
inline int rd(){
register int ret = 0, f = 1; register char ch;
while(!isdigit(ch = getchar())) if(ch == '-') f = 0;
ret = ch^48;
while(isdigit(ch = getchar())) ret = (ret<<1) + (ret<<3) + (ch^48);
return f ? ret : -ret;
}
inline void prework(){
int cnt = 1;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
a[i][j] = b[i][j] = cnt++;
return;
}
void cp(int x, int y, int r){ //把a数组复制一下给b数组
for(register int i=x-r; i<=x+r; i++)
for(register int j=y-r; j<=y+r; j++)
b[i][j] = a[i][j];
return;
}
void rotate_l(int x, int y, int r){ //逆时针
if(!r) return;
for(register int i=x-r; i<=x+r; i++){
for(register int j=y-r; j<=y+r; j++){
int x1 = x - (y - j);
int y1 = y - (i - x);
a[i][j] = b[x1][y1];
}
}
rotate_l(x, y, --r);
return;
}
void rotate_r(int x, int y, int r){ //顺时针
if(!r) return;
for(register int i=x-r; i<=x+r; i++){
for(register int j=y-r; j<=y+r; j++){
int x1 = x + (y - j);
int y1 = y + (i - x);
a[i][j] = b[x1][y1];
}
}
rotate_r(x, y, --r);
return;
}
int main(){
n = rd();
m = rd();
prework();
while(m--){
int x, y, r, z;
x = rd();
y = rd();
r = rd();
z = rd();
if(z) rotate_l(x, y, r);
else rotate_r(x, y, r);
if(m) cp(x, y, r);
}
for(register int i=1; i<=n; i++){
for(register int j=1; j<=n; j++){
printf("%d ", a[i][j]);
}
putchar('\n');
}
return 0;
}