#include <bits/stdc++.h>
// 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。
//1.动态规划求解
//2.由题意可得最高位的数值是2
//3.以剩余为使用的元素作为基准开始进行动态规划的递推
//4.注意要在运算的过程中取余(在运算的过程中取余和得到最后的结果再取余的答案一样,但能适应存储)
using namespace std;
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
long long mod = 1000000007;
long long int n;
cin>>n;
long long **states = new long long *[n+1];
for(long long i =0;i<n+1;++i)
states[i] = new long long[6];
for(long long i=0;i<6;++i)
states[0][i]=0;
/*
0---剩下 013
1---剩下13
2---剩下01
3---剩下3
4---剩下1
5---无
*/
for(long long i=1;i<=n;++i){
long long j=i-1;
states[i][0] = 1;
states[i][1] = (states[j][0]+states[j][1]*2)%mod;
states[i][2] = (states[j][0]+states[j][2])%mod;//对于2状态已经有了3了,所以只能放2
states[i][3] = (states[j][1]+states[j][3]*2)%mod;
states[i][4] = (states[j][1] + states[j][2]+states[j][4]*2)%mod;
states[i][5] = (states[j][3] + states[j][4] + states[j][5]*2)%mod;//当2031已经凑全后,后面只能放1和3
}
cout<<states[n][5]<<endl;
return 0;
}