1 #include <iostream>
2 #include <stdio.h>
3 #include <string>
4 #include <string.h>
5 #include "biginteger.h"
6 using namespace std;
7 struct matrix
8 {
9 BigInteger g[10][10];
10 int n, m;
11 matrix operator=(const matrix &b)
12 {
13 n = b.n;
14 m = b.m;
15 for (int i = 0; i < n; i++)
16 {
17 for (int j = 0; j < m; j++)
18 {
19 g[i][j] = b.g[i][j];
20 }
21 }
22 return *this;
23 }
24 };
25 matrix operator*(const matrix &a, const matrix &b)
26 {
27 matrix c;
28 if (a.m != b.n || a.n != b.m)
29 return c;
30 c.n = a.n;
31 c.m = a.m;
32 BigInteger sum;
33 for (int i = 0; i < a.n; i++)
34 {
35 for (int j = 0; j < a.m; j++)
36 {
37 int I;
38 sum = 0;
39 for (I = 0; I < a.m; I++)
40 {
41 sum = sum+(a.g[i][I] * b.g[I][j]);
42 }
43 c.g[i][j] = sum;
44 }
45 }
46 return c;
47 }
48 matrix pow(matrix a, int b)
49 {
50 matrix ans, base = a;
51 ans.n = ans.m = a.n;
52 for (int i = 0; i < ans.n; i++)
53 {
54 for (int j = 0; j < ans.m;j++)
55 {
56 if(i==j)
57 ans.g[i][j] = 1;
58 else ans.g[i][j] = 0;
59 }
60 }
61 while (b)
62 {
63 if (b & 1)
64 {
65 ans = ans * base;
66 }
67 base = base * base;
68 b >>= 1;
69 }
70 return ans;
71 }
72 int main()
73 {
74 matrix a, b;
75 int c;
76 int i, j;
77 cin >> a.n >> a.m;
78 for (i = 0; i < a.n; i++)
79 {
80 for (j = 0; j < a.m; j++)
81 {
82 cin >> a.g[i][j];
83 }
84 }
85 for (i = 0; i < a.n; i++)
86 {
87 for (j = 0; j < a.m; j++)
88 {
89 cin >> b.g[i][j];
90 }
91 }
92 b.n = b.m = a.n;
93 matrix A = a;
94 while (cin >> c)
95 {
96 a = A * pow(b, c);
97 for (i = 0; i < a.n; i++)
98 {
99 for (j = 0; j < a.m; j++)
100 {
101 cout << a.g[i][j] << ' ';
102 }
103 cout << endl;
104 }
105 }
106 }