#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Matr = 4;
const ll mod = 1e9 + 7;
class mat
{
public:
ll a[Matr][Matr], size;
mat(int len){
size = len;
memset(a, 0, sizeof(a));
}
void print()
{
for (int i = 1;i <= size;i++)
{
for (int j = 1;j <= size;j++)
printf("%lld ", a[i][j]);
printf("\n");
}
}
void operator =(mat m)
{
for (int i = 1;i <= size;i++)
for (int j = 1;j <= size;j++)
a[i][j] = m.a[i][j];
}
};
mat operator *(mat m1, mat m2)
{
mat ans(m1.size);
for (int i = 1;i <= m1.size;i++)
for (int j = 1;j <= m2.size;j++)
if (m1.a[i][j])
for (int k = 1;k <= m1.size;k++)
ans.a[i][k] = (ans.a[i][k] + m1.a[i][j] * m2.a[j][k]) % mod;
return ans;
}
mat quickmulti(mat m, int n)
{
mat ans(m.size);
for (int i = 1;i <= m.size;i++)
ans.a[i][i] = 1;
while (n)
{
if (n & 1)ans = m * ans;
m = m * m;
n >>= 1;
}
return ans;
}