// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;



#define rep(var,n)  for(int var=0;var<(n);++var)



const ll MOD=1000000007LL;



ll SUB(ll x, ll y) { return (x-y+MOD) % MOD; }

ll MUL(ll x, ll y) { return x*y % MOD; }



//xのe丈の高速計算

ll POW(ll x, ll e) {

  //最初1

  ll v=1;

  //後処理は、xの二乗を取って、e/2する。

  //for (;something;)はwhile(something)に同じ

  for(; e; x=MUL(x,x), e>>=1) {

    //もしeが奇数なら、vにxをかける。

    if (e&1) v = MUL(v,x);

  }

  return v;

}





//

inline bool bad(int a,int b,int c,int d){

    if (        b==1 && c==2 && d==3) return true;

    if (a==1         && c==2 && d==3) return true;

    if (        b==2 && c==1 && d==3) return true;

    if (        b==1 && c==3 && d==2) return true;

    if (a==1 && b==2         && d==3) return true;

    return false;

}



ll solve(int N) {

    ll dp[101][625][2];

    memset(dp, 0, sizeof(dp));

    dp[0][0][0] = 1;

    for (int i=0;i<N;i++){

        for (int a=0;a<5;a++) for (int b=0;b<5;b++) for (int c=0;c<5;c++) for (int d=0;d<5;d++) {

            int abcd = ((a*5+b)*5+c)*5+d;

            for (int e=1; e<5; ++e) {

                int bcde = ((b*5+c)*5+d)*5+e;

                bool _bad = bad(b,c,d,e);

                for (int j=0;j<2;j++){

                    (dp[i+1][bcde][j || _bad] += dp[i][abcd][j]) %= MOD;

                }

            }

        }

    }

    ll ans = 0;

    for (int i=0;i<625;i++) {

        (ans += dp[N][i][1]) %= MOD;

    }

    return SUB(POW(4,N), ans);

}



int main() {

    int N; cin >> N;

    cout << solve(N) << endl;

    return 0;

}


// Optimized solution to the same problem (faster):
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;



#define rep(var,n)  for(int var=0;var<(n);++var)



const ll MOD=1000000007LL;



ll SUB(ll x, ll y) { return (x-y+MOD) % MOD; }

ll MUL(ll x, ll y) { return x*y % MOD; }



//xのe丈の高速計算

ll POW(ll x, ll e) {

  //最初1

  ll v=1;

  //後処理は、xの二乗を取って、e/2する。

  //for (;something;)はwhile(something)に同じ

  for(; e; x=MUL(x,x), e>>=1) {

    //もしeが奇数なら、vにxをかける。

    if (e&1) v = MUL(v,x);

  }

  return v;

}





//a,b,c,d  1<->A, 2<->G, 3<->C, 4<->Tに対応?で、admissible出ない組み合わせがbad==true

inline bool bad(int a,int b,int c,int d){

    if (        b==1 && c==2 && d==3) return true;

    if (a==1         && c==2 && d==3) return true;

    if (        b==2 && c==1 && d==3) return true;

    if (        b==1 && c==3 && d==2) return true;

    if (a==1 && b==2         && d==3) return true;

    return false;

}





ll solve(int N) {

  //n のとき、a,b,c,dそれぞれ5通り試すの。

    ll dp[101][256][2];

    memset(dp, 0, sizeof(dp));

    dp[0][0][0] = 1;

    for (int i=0;i<N;i++){

        for (int a=0;a<4;a++) for (int b=0;b<4;b++) for (int c=0;c<4;c++) for (int d=0;d<4;d++) {

            //何か5進法で表記しておるな？

            int abcd = ((a*4+b)*4+c)*4+d;

            for (int e=0; e<4; ++e) {

              //

                int bcde = ((b*4+c)*4+d)*4+e;

                //直前n-1でbadになるかどうかと、nでbadになるかどうかで4通りあるが、それぞれ

                //

                bool _bad = bad(b,c,d,e);

                for (int j=0;j<2;j++){

                    (dp[i+1][bcde][j || _bad] += dp[i][abcd][j]) %= MOD;

                }

            }

        }

    }

    ll ans = 0;

    for (int i=0;i<256;i++) {

        (ans += dp[N][i][1]) %= MOD;

    }

    return SUB(POW(4,N), ans);

}



int main() {

    int N; cin >> N;

    cout << solve(N) << endl;

    return 0;

}


// Fastest known solution for this problem: