using
System;
class
GFG
{
static
int
N = 3;
static
void
multiply(
int
[,]a,
int
[,]b,
int
[,]res)
{
int
[,]mul =
new
int
[N,N];
for
(
int
i = 0; i < N; i++)
{
for
(
int
j = 0; j < N; j++)
{
mul[i,j] = 0;
for
(
int
k = 0; k < N; k++)
mul[i,j] += a[i,k] * b[k,j];
}
}
for
(
int
i = 0; i < N; i++)
for
(
int
j = 0; j < N; j++)
res[i,j] = mul[i,j];
}
static
void
power(
int
[,]G,
int
[,]res,
int
n)
{
if
(n == 1) {
for
(
int
i = 0; i < N; i++)
for
(
int
j = 0; j < N; j++)
res[i,j] = G[i,j];
return
;
}
power(G, res, n / 2);
multiply(res, res, res);
if
(n % 2 != 0)
multiply(res, G, res);
}
public
static
void
Main()
{
int
[,]G = { { 1, 1, 1 },
{ 0, 0, 1 },
{ 0, 1, 0 } };
int
k = 2;
int
[,]res =
new
int
[N,N];
power(G, res, k);
for
(
int
i = 0; i < N; i++)
{
for
(
int
j = 0; j < N; j++)
Console.Write(res[i,j] +
" "
);
Console.WriteLine(
""
);
}
}
}