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();
        }
    }
}