import java.util.Scanner;
// 一维数组行优先存储的矩阵转置
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n = in.nextInt();// 行
int m = in.nextInt();// 列
int[] arr = new int[n * m];
int index = 0;
while (in.hasNextInt()) {
// 一维数组行优先存储
arr[index++] = in.nextInt();
}
int[] res = new int[n * m];
// 遍历arr,转置,再存到一维数组res中
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// 原矩阵位置:i*cols + j
// 转置矩阵位置:j*rows + i
res[j*n+i] = arr[i*m+j];
}
}
// 遍历转换后的一维数组,行、列转换
int index_new = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.printf("%d ",res[index_new++]);
}
System.out.println();
}
}
}