#include <stdio.h>
#include <stdlib.h>
void free_matrix(int **matrix, int n) {
if (matrix) {
for (int i = 0; i < n; i++)
free(matrix[i]);
free(matrix);
}
}
int **create_matrix(int n, int m) {
int **matrix = malloc(n * sizeof(int *));
if (!matrix)
return NULL;
for (int i = 0; i < n; i++) {
matrix[i] = malloc(m * sizeof(int));
if (!matrix[i]) {
free_matrix(matrix, i);
return NULL;
}
}
return matrix;
}
int input_matrix(int ***matrix, int *n, int *m) {
if (scanf("%d%d", n, m) != 2 || *n <= 0 || *m <= 0)
return 0;
*matrix = create_matrix(*n, *m);
if (!(*matrix))
return 0;
for (int i = 0; i < *n; i++) {
for (int j = 0; j < *m; j++) {
if (scanf("%d", &(*matrix)[i][j]) != 1) {
free_matrix(*matrix, *n);
return 0;
}
}
}
return 1;
}
void print_matrix(int **matrix, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (j)
printf(" ");
printf("%d", matrix[i][j]);
}
if (i != n - 1)
printf("\n");
}
}
int main() {
int op;
if (scanf("%d", &op) != 1) {
printf("n/a");
return 0;
}
if (op == 1) {
int **a, **b;
int n1, m1, n2, m2;
if (!input_matrix(&a, &n1, &m1) ||
!input_matrix(&b, &n2, &m2) ||
n1 != n2 || m1 != m2) {
printf("n/a");
return 0;
}
int **r = create_matrix(n1, m1);
for (int i = 0; i < n1; i++)
for (int j = 0; j < m1; j++)
r[i][j] = a[i][j] + b[i][j];
print_matrix(r, n1, m1);
free_matrix(a, n1);
free_matrix(b, n2);
free_matrix(r, n1);
} else if (op == 2) {
int **a, **b;
int n1, m1, n2, m2;
if (!input_matrix(&a, &n1, &m1) ||
!input_matrix(&b, &n2, &m2) ||
m1 != n2) {
printf("n/a");
return 0;
}
int **r = create_matrix(n1, m2);
for (int i = 0; i < n1; i++) {
for (int j = 0; j < m2; j++) {
r[i][j] = 0;
for (int k = 0; k < m1; k++)
r[i][j] += a[i][k] * b[k][j];
}
}
print_matrix(r, n1, m2);
free_matrix(a, n1);
free_matrix(b, n2);
free_matrix(r, n1);
} else if (op == 3) {
int **a;
int n, m;
if (!input_matrix(&a, &n, &m)) {
printf("n/a");
return 0;
}
int **r = create_matrix(m, n);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
r[j][i] = a[i][j];
print_matrix(r, m, n);
free_matrix(a, n);
free_matrix(r, m);
} else {
printf("n/a");
}
return 0;
}