【题意】:
给你2×N的方格图。
从左上角开始走,走到某一个格子上面就会变黑,然后问,共有多少种情况。
其实说句老实话,打表都不好打表。
其实看出来是一个规律题目了。
打表之后得到结果
结果是:4×3^(n-2)
/*
#include <cstdio>
#include <queue>
#include <algorithm>
#include <map>
using namespace std;
typedef pair<int,int> Pii;
#define mp(x,y) make_pair(x,y)
const int N = 1e5+10;
int X[8]={-1,-1,-1,0,0,1,1,1};
int Y[8]={-1,0,1,-1,1,-1,0,1};
int vis[5][N],n;
bool check(int x,int y){
return 1<=x && x<=2 && 1<=y && y<=n;
}
typedef struct Node{
Pii P;
vector<Pii>v;
};
map<vector<Pii>,int>Mp;
int cnt = 0;
void dfs(int x,int y,vector<Pii> v){
if(x==2&&y==n){
sort(v.begin(),v.end());
if( Mp[v]==0 ){
cnt++;
Mp[v] = 1;
}
return ;
}
for(int i=0;i<8;i++){
int tx = x+X[i];
int ty = y+Y[i];
int f = 1;
Pii tmp = mp(tx,ty);
for(auto t:v){
if(tmp==t) f=0;
}
if ( check(tx,ty) && f){
v.push_back(tmp);
dfs(tx,ty,v);
v.pop_back();
}
}
}
int main()
{
scanf("%d",&n);
vector<Pii>v;
v.push_back(mp(1,1));
dfs(1,1,v);
printf("%d\n",cnt);
}
*/
#include<stdio.h>
typedef long long ll;
const int mod =1e9+7;
ll qpow(ll a,ll b){
ll ans =1;
while(b){
if( b&1 ) ans = ans *a %mod;
a= a * a % mod ;
b>>=1 ;
}
return ans ;
}
int main()
{
ll n;
scanf("%lld",&n);
if( n==1 ){
printf("1\n");
return 0;
}else {
printf("%lld\n", 4 * qpow(3, n - 2) % mod);
}
}