#include <stdio.h>
#define MAX 1000000
typedef struct node{
int r; //行
int c; //列
int v; //元素的值
}node;
/*
第一个元素用来存储在当时矩阵的行与列
*/
node a[MAX]; //转换之间的顺序
node b[MAX]; //转换之事的顺序
void fun()
{
b[0].r = a[0].c;
b[0].c = a[0].r;
b[0].v = a[0].v;
int k = 1;
for(int i = 0;i < b[0].r;i++){
for(int j = 1;j <= a[0].v;j++){
if(a[j].c == i){
b[k].r = a[j].c;
b[k].c = a[j].r;
b[k++].v = a[j].v;
}
}
}
}
int swap(int x,int y,int *e)
{
for(int i = 1;i <= b[0].v;i++){
if(b[i].r == x && b[i].c == y) {
*e = b[i].v;
return 1;
}
}
return 0;
}
int main()
{
int r,c;
int k = 1;
scanf("%d %d",&r,&c);
a[0].r = r;
a[0].c = c;
for(int i = 0;i < r;i++){
for(int j = 0;j < c;j++){
int x;
scanf("%d",&x);
if(x != 0){
a[k].r = i;
a[k].c = j;
a[k++].v = x;
}
}
}
a[0].v = k-1;
fun();
/*
for(int i = 1;i <= a[0].v;i++){
printf("%d %d %d\n",a[i].r,a[i].c,a[i].v);
}
printf("\n");
for(int i = 1;i <= b[0].v;i++){
printf("%d %d %d\n",b[i].r,b[i].c,b[i].v);
}
printf("\n");
*/
for(int i = 0;i < b[0].r;i++){
for(int j = 0;j < b[0].c;j++){
int e;
if(swap(i,j,&e)){
printf("%d ",e);
}else {
printf("%d ",0);
}
}
printf("\n");
}
return 0;
}