#include<bits/stdc++.h>
using namespace std;
int n,m;
int arr1[501][501]={};
int arr2[501][501]={};
struct move{
int x,y;
int r,z;
}mo[501];
void zhuan(int x1,int y1,int r1,int z1){
if(z1){
for(int i=x1-r1;i<=x1+r1;i++){
for(int j=x1-r1;j<=x1+r1;j++){
if(i==x1||j==y1){
if(j==y1){
arr1[i][j]=arr2[x1][y1-(i-x1)];
}else if(i==x1){
arr1[i][j]=arr2[x1+(j-y1)][y1];
}
}else{
arr1[i][j]=arr2[x1+(j-y1)][y1-(i-x1)];
}
}
}
}else{
for(int i=x1-r1;i<=x1+r1;i++){
for(int j=x1-r1;j<=x1+r1;j++){
if(i==x1||j==y1){
if(j==y1){
arr1[i][j]=arr2[x1][y1+(i-x1)];
}else if(i==x1){
arr1[i][j]=arr2[x1-(j-y1)][y1];
}
}else{
arr1[i][j]=arr2[x1-(j-y1)][y1+(i-x1)];
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
arr2[i][j]=arr1[i][j];
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
arr1[i][j]=(i-1)*n+j;
arr2[i][j]=(i-1)*n+j;
}
}
for(int i=1;i<=m;i++){
cin>>mo[i].x>>mo[i].y>>mo[i].r>>mo[i].z;
zhuan(mo[i].x,mo[i].y,mo[i].r,mo[i].z);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<arr1[i][j]<<" ";
}
cout<<endl;
}
return 0;
}