#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; int a[3][4]; vector> v; void dfs(int k){ bool myon=0; for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ if(!a[i][j] && !a[i][j+1]){ a[i][j]=a[i][j+1]=k; dfs(k+1); a[i][j]=a[i][j+1]=0; myon=1; } } } for(int i=0; i<4; i++){ for(int j=0; j<2; j++){ if(!a[j][i] && !a[j+1][i]){ a[j][i]=a[j+1][i]=k; dfs(k+1); a[j][i]=a[j+1][i]=0; myon=1; } } } if(myon) return; vector w(3); for(int j=0; j<4; j++){ vector w(3); if(a[0][j]==a[1][j] && a[1][j]!=0) w[0]=w[1]=3; else if(a[1][j]==a[2][j] && a[1][j]!=0) w[1]=w[2]=3; for(int i=0; i<3; i++){ if(a[i][j]!=0 && w[i]!=3){ if(j>0 && a[i][j-1]==a[i][j]) w[i]=1; else w[i]=2; } } v.push_back(w); } } const ll MOD=1e9+7; vector> matrixmul(int l, int m, int n, vector> a, vector> b){ vector> c(l, vector(n)); for(int i=0; i> matrixpow(int n, vector> a, ll k){ vector> ap=a, ans(n, vector(n)); for(int i=0; i>=1; } return ans; } int main() { ll n; cin>>n; dfs(1); sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); int m=v.size(); vector> mat(m, vector(m)); for(int i=0; i