#include<bits/stdc++.h>
using namespace std;
const int N=100;
int A[N][N],B[N][N],C[N][N];
int n,m,k;
int multi(int u, int v){
int sum = 0;
for (int j = 0; j < m; j++)
sum += (A[u][j] * B[j][v]);
return sum;
}
int main(){
cin >> n >> m >> k;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++) cin >> A[i][j];
for(int i=0;i<m;i++)
for(int j=0;j<k;j++) cin >> B[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<k;j++) C[i][j] = multi(i, j);
for(int i=0;i<n;i++){
for(int j=0;j<k;j++) cout << C[i][j] << " ";
cout << endl;
}
return 0;
}
struct matrix{ int m[N][N]; }; //定义矩阵,常数N是矩阵的行数和列数
matrix operator * (const matrix& a, const matrix& b){
//重载*为矩阵乘法。注意const
matrix c;
memset(c.m, 0, sizeof(c.m)); //清零
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
for(int k = 0; k<N; k++)
//c.m[i][j] += a.m[i][k] * b.m[k][j]; //不取模
c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;//取模
return c;
}
matrix pow_matrix(matrix a, int n){ //矩阵快速幂,代码和普通快速幂几乎一样
matrix ans;
memset(ans.m,0,sizeof(ans.m));
for(int i=0;i<N;i++)
ans.m[i][i] = 1; //初始化为单位矩阵,类似普通快速幂的ans=1
while(n) {
if(n&1) ans = ans * a; //不能简写为ans *= a,这里的*重载了
a = a * a;
n>>=1;
}
return ans;
}
#include<bits/stdc++.h>
using namespace std;
const int N=40;
struct matrix{ int m[N][N]; }; //定义矩阵
matrix A,B;
matrix operator * (const matrix& a, const matrix& b){
//重载*为矩阵乘法。注意const
matrix c;
memset(c.m, 0, sizeof(c.m)); //清零
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
for(int k = 0; k<N; k++)
c.m[i][j] += a.m[i][k] * b.m[k][j]; //不取模
return c;
}
matrix pow_matrix(matrix a, int n){ //矩阵快速幂
matrix ans;
memset(ans.m,0,sizeof(ans.m));
for(int i=0;i<N;i++)
ans.m[i][i] = 1;
while(n) {
if(n&1) ans = ans * a;
a = a * a;
n>>=1;
}
return ans;
}
int main(){
int s,q; cin >>s>>q; //s行s列,q次幂
for(int i=1;i<=s;i++)
for(int j=1;j<=s;j++)
cin >> A.m[i][j];
B = pow_matrix(A,q);
for(int i=1;i<=s;i++){
for(int j=1;j<=s;j++) cout << B.m[i][j] << " ";
cout << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
static int n;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int q = sc.nextInt(); //q次幂
int[][] A;
A = new int[n][n];
for(int i = 0;i < n; i++)
for(int j = 0; j < n; j++)
A[i][j] = sc.nextInt();
int[][] res = pow_matrix(A,q);
for(int i = 0; i < n; i++) { //打印
for (int j = 0; j < n; j++)
System.out.print(res[i][j]+" ");
System.out.println();
}
}
static int[][] pow_matrix(int[][] a, int q) { //快速幂
int[][] res = new int[n][n];
for(int i = 0; i < n; i ++)
res[i][i] = 1;
while(q > 0) {
if(q % 2 == 1) res = multi(res, a);
a = multi(a,a);
q /= 2;
}
return res;
}
static int[][] multi(int[][] a, int[][] b) { //矩阵乘法
int[][] temp = new int[n][n];
for(int i = 0; i < n; i ++)
for(int j = 0; j < n;j++ )
for(int k = 0; k < n; k++)
temp[i][j] += a[i][k]*b[k][j];
return temp;
}
}
def multi(A, B):
m1, n1 = len(A), len(A[0])
m2, n2 = len(B), len(B[0])
if n1 != m2: return None
C = [[0] * n2 for i in range(m1)]
for i in range(m1):
for k in range(n1):
for j in range(n2):
C[i][j] += A[i][k] * B[k][j]
return C
def power(A, n):
N = len(A)
res = [[0] * N for i in range(N)]
for i in range(N):
res[i][i] = 1
while n:
if n % 2:
res = multi(res, A)
A = multi(A, A)
n //= 2
return res
s, q = map(int, input().split())
A = []
for i in range(s):
A.append(list(map(int, input().split())))
res = power(A, q)
for row in res:
for c in row:
print(c, end = ' ')
print()
import math
mod = int(math.pow(10,9))+7
def multi(A, B): #矩阵乘法
C = [[0]*6 for i in range(6)]
for i in range(6):
for j in range(6):
for k in range(6):
C[i][j] = int((C[i][j] + A[i][k] * B[k][j]) % mod)
return C
def power(A, n): #矩阵快速幂
res = [[0]*6 for i in range(6)]
for i in range(6):
res[i][i] = 1
while n:
if n % 2:
res = multi(res, A)
A = multi(A, A)
n >>= 1
return res
def solve(n, dice):
transfer = [[4]*6 for i in range(6)] #转移矩阵
for i in range(6): #去掉互斥的情况
for j in dice.get((i+3)%6,[]): #0对面是3,1对4,2对5
transfer[i][j]= 0
transfer = power(transfer, n-1) #转移矩阵乘n-1次
temp = [4]*6 #表示最下面的骰子
ans = [0]*6
for i in range(6): #最后乘最下面的骰子
for j in range(6):
ans[i] += transfer[i][j] * temp[j]
print(int(sum(ans) % mod))
n, m = [int(str) for str in input().split()]
dice = dict() #用字典记录互相排斥的面
for i in range(m):
x, y = [int(str)-1 for str in input().split()]
if x not in dice: dice[x] = [y]
else: dice[x].append(y)
if y not in dice: dice[y] = [x]
else: dice[y].append(x)
solve(n, dice)