#include <stdio.h>

int main() {
    int m, n, p, q;

    // Read dimensions of first matrix
    scanf("%d %d", &m, &n);

    // Validate dimensions
    if (m <= 0 || n <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    int A[m][n];

    // Read elements of first matrix
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &A[i][j]);

    // Read dimensions of second matrix
    scanf("%d %d", &p, &q);

    // Validate dimensions
    if (p <= 0 || q <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    int B[p][q];

    // Read elements of second matrix
    for (int i = 0; i < p; i++)
        for (int j = 0; j < q; j++)
            scanf("%d", &B[i][j]);

    // Check if multiplication is possible
    if (n != p) {
        printf("Invalid input\n");
        return 0;
    }

    int result[m][q];

    // Initialize result matrix
    for (int i = 0; i < m; i++)
        for (int j = 0; j < q; j++)
            result[i][j] = 0;

    // Matrix multiplication
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < q; j++) {
            for (int k = 0; k < n; k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // Print result matrix
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < q; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

// editor4#include <stdio.h>

int main() {
    int m, n, p, q;

    // Read dimensions of first matrix
    scanf("%d %d", &m, &n);

    // Validate dimensions
    if (m <= 0 || n <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    int A[m][n];

    // Read elements of first matrix
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &A[i][j]);

    // Read dimensions of second matrix
    scanf("%d %d", &p, &q);

    // Validate dimensions
    if (p <= 0 || q <= 0) {
        printf("Invalid input\n");
        return 0;
    }

    int B[p][q];

    // Read elements of second matrix
    for (int i = 0; i < p; i++)
        for (int j = 0; j < q; j++)
            scanf("%d", &B[i][j]);

    // Check if multiplication is possible
    if (n != p) {
        printf("Invalid input\n");
        return 0;
    }

    int result[m][q];

    // Initialize result matrix
    for (int i = 0; i < m; i++)
        for (int j = 0; j < q; j++)
            result[i][j] = 0;

    // Matrix multiplication
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < q; j++) {
            for (int k = 0; k < n; k++) {
                result[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // Print result matrix
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < q; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}