#include using namespace std; template using matrix = vector>; template matrix operator*(const matrix& a, const matrix& b) { int n = a.size(); matrix ret(n, vector(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { ret[i][j] += a[i][k] * b[k][j]; } } } return ret; } template matrix operator^(matrix a, long long b) { int n = a.size(); matrix ret(n, vector(n)); for (int i = 0; i < n; i++) { ret[i][i] = 1; } while (b) { if (b & 1) { ret = ret * a; } a = a * a; b >>= 1; } return ret; } int main() { matrix m(2, vector(2)); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { cin >> m[i][j]; } } m = m ^ 3; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { cout << m[i][j] << ' '; } cout << endl; } }