#include<bits/stdc++.h>
using namespace std;
int mod ;
struct Matrix {
int n , m ;
int mat[4][4] ;
int * operator [] (int x) {
return mat[x] ;
}
} ;
Matrix operator * (Matrix &x , Matrix &y) {
Matrix res ;
res.n = x.n , res.m = y.m ;
memset (res.mat , 0 , sizeof(res.mat) ) ;
for (int i = 0 ; i < x.n ; i ++) {
for (int j = 0 ; j < y.m ; j ++) {
for (int k = 0 ; k < x.m ; k ++) {
int tmp = (int) (1ll*x[i][k] * y[k][j] % mod ) ;
res[i][j] = (res[i][j] + tmp) % mod ;
}
}
}
return res ;
}
int main () {
Matrix x , y ;
x = {2 , 2 , {{1 , 0} , {2, 3}} } ;
y = {2 , 2 , {{2 , 1} , {3, 4}} } ;
mod = 1000 ;
Matrix z = x * y ;
for (int i = 0 ; i < 2 ; i ++) {
for (int j = 0 ; j < 2 ; j++) {
cout << z[i][j] << " " ;
} cout << endl ;
}
return 0 ;
}