#include <iostream>
#include <vector>
using namespace std;
//矩阵乘法
class MatrixMulti {
private:
//A是个x行y列的矩阵,B是个y行z列的矩阵
int x, y, z;
vector<vector<int>> A, B;
public:
//构造函数
MatrixMulti(const int x, const int y, const int z);
//析构函数
~MatrixMulti();
//矩阵A,B相乘
vector<vector<int>> multi(void)const;
//<<重载(友元函数)
friend ostream& operator<<(ostream& cout, vector<vector<int>>C);
};
MatrixMulti::MatrixMulti(const int x, const int y, const int z) {
this->A.clear();
this->B.clear();
this->x = x;
this->y = y;
this->z = z;
vector<int>vi;
int a;
for (int i = 0; i < x; i++) {
vi.clear();
for (int j = 0; j < y; j++) {
cin >> a;
vi.push_back(a);
}
this->A.push_back(vi);
}
for (int i = 0; i < y; i++) {
vi.clear();
for (int j = 0; j < z; j++) {
cin >> a;
vi.push_back(a);
}
this->B.push_back(vi);
}
return;
}
MatrixMulti::~MatrixMulti() {
}
vector<vector<int>> MatrixMulti::multi(void) const {
vector<vector<int>>C;
vector<int>vi;
int a;
for (int i = 0; i < x; i++) {
vi.clear();
for (int j = 0; j < z; j++) {
a = 0;
//计算a的值
for (int k = 0; k < y; k++)
a += this->A[i][k] * this->B[k][j];
vi.push_back(a);
}
C.push_back(vi);
}
return C;
}
ostream& operator<<(ostream& cout, vector<vector<int>> C) {
for (int i = 0; i < C.size(); i++) {
cout << C[i][0];
for (int j = 1; j < C[1].size(); j++)
cout << ' ' << C[i][j];
cout << endl;
}
// TODO: 在此处插入 return 语句
return cout;
}
int main() {
int a, b, c;
while (cin >> a >> b >> c) { // 注意 while 处理多个 case
cout << MatrixMulti(a, b, c).multi() << endl;
}
}
// 64 位输出请用 printf("%lld")