struct Mat
{
ll m[8][8];
}mat;
Mat mul(Mat &a,Mat &b)
{
Mat c;
c.m[1][1]=c.m[1][2]=c.m[2][1]=c.m[2][2]=0;
for(int i=1;i<=2;++i)
for(int j=1;j<=2;++j)
for(int k=1;k<=2;++k)
c.m[i][j]=c.m[i][j]+a.m[i][k]*b.m[k][j];
return c;
}
Mat Pow(Mat a,int y)
{
Mat b;
b.m[1][1]=b.m[2][2]=1;
b.m[1][2]=b.m[2][1]=0;
while(y)
{
if(y&1)
b=mul(b,a);
a=mul(a,a);
y>>=1;
}
return b;
}