![Plant(???????????????????????????????????????? − 185????) Plant(???????????????????????????????????????? − 185????)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UY3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHhNRGcwTVRJeEx6SXdNVGN3T0M4eE1EZzBNVEl4TFRJd01UY3dPREUyTVRFek1qTTROVFk0TFRFeE5qWTVOVE13TlM1d2JtYz0uanBn.jpg?w=700&webp=1)
![Plant(???????????????????????????????????????? − 185????) Plant(???????????????????????????????????????? − 185????)](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UY3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHhNRGcwTVRJeEx6SXdNVGN3T0M4eE1EZzBNVEl4TFRJd01UY3dPREUyTVRFek1qVXdPRE0wTFRFNU1EVTJOamcyT1RndWNHNW4uanBn.jpg?w=700&webp=1)
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=,mod=;
struct Matrix
{
long long mat[maxn][maxn];
Matrix operator*(const Matrix& m)const///重载*运算符,使其能进行矩阵相乘的运算
{
Matrix tmp;
for(int i = ; i < maxn ; i++)
{
for(int j = ; j < maxn ; j++)
{
tmp.mat[i][j] = ;
for(int k = ; k < maxn ; k++)
{
tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%mod;
tmp.mat[i][j] %= mod;
}
}
}
return tmp;
}
};
Matrix m;
void init()
{
m.mat[][]=;
m.mat[][]=;
m.mat[][]=;
m.mat[][]=;
}
long long run(long long n)
{
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for(int i=; i<; i++)
ans.mat[i][i]=;
while(n)
{
if(n&)
ans=ans*m;
n>>=;
m=m*m;
}
return ans.mat[][];
}
int main()
{
long long n;
while(cin>>n)
{
init();
cout<<run(n)<<endl;
}
return ;
}