#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
int c[66][66], a[66][66], b[66][66], n, mod,m;
void mult(int x[66][66], int y[66][66]) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
c[i][j] = 0;
for (int k = 1; k <= n; k++)
c[i][j] = (c[i][j] + x[i][k] * y[k][j]) % mod;
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
x[i][j] = c[i][j];
}
int main() {
scanf("%d%d%d", &n, &m, &mod);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
a[i][i + n] = a[i + n][i + n] = b[i][i] = b[i + n][i + n] = 1;
}
n *= 2;
m++;
for (; m > 0; m /= 2, mult(a, a))
if (m % 2)mult(b, a);
n /= 2;
for (int i = 1; i <= n; i++)
b[i][i + n]--;
for (int i = 1,j = 0; i <= n; i++) {
for (j = 1; j < n; j++)
printf("%d ", b[i][j + n]);
printf("%d\n", b[i][j + n]);
}
return 0;
}
poj 3233
最新推荐文章于 2022-05-05 20:34:22 发布