using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Linq;
using static System.Math;

class Program{
    static long mod = (long)1e9 + 7;

    static void Main(){
        int n = int.Parse(Console.ReadLine());
        long[,] dp = new long[n+1,16];
        for (int i = 0;i < 16;i++){
            dp[2,i] = 1;
        }
        for (int i = 3;i <= n;i++){
            dp[i,0] = (dp[i,0] + dp[i-1,0]) % mod;
            dp[i,0] = (dp[i,0] + dp[i-1,4]) % mod;
            dp[i,0] = (dp[i,0] + dp[i-1,8]) % mod;
            dp[i,0] = (dp[i,0] + dp[i-1,12]) % mod;

            dp[i,1] = (dp[i,1] + dp[i-1,0]) % mod;
            dp[i,1] = (dp[i,1] + dp[i-1,4]) % mod;
            dp[i,1] = (dp[i,1] + dp[i-1,12]) % mod;

            dp[i,2] = (dp[i,2] + dp[i-1,0]) % mod;
            dp[i,2] = (dp[i,2] + dp[i-1,4]) % mod;
            dp[i,2] = (dp[i,2] + dp[i-1,8]) % mod;
            dp[i,2] = (dp[i,2] + dp[i-1,12]) % mod;

            dp[i,3] = (dp[i,3] + dp[i-1,0]) % mod;
            dp[i,3] = (dp[i,3] + dp[i-1,4]) % mod;
            dp[i,3] = (dp[i,3] + dp[i-1,8]) % mod;
            dp[i,3] = (dp[i,3] + dp[i-1,12]) % mod;

            dp[i,4] = (dp[i,4] + dp[i - 1,1]) % mod;
            dp[i,4] = (dp[i,4] + dp[i - 1,5]) % mod;
            dp[i,4] = (dp[i,4] + dp[i - 1,9]) % mod;
            dp[i,4] = (dp[i,4] + dp[i - 1,13]) % mod;

            dp[i,5] = (dp[i,5] + dp[i - 1,1]) % mod;
            dp[i,5] = (dp[i,5] + dp[i - 1,5]) % mod;
            dp[i,5] = (dp[i,5] + dp[i - 1,9]) % mod;
            dp[i,5] = (dp[i,5] + dp[i - 1,13]) % mod;

            dp[i,6] = (dp[i,6] + dp[i-1,5]) % mod;
            dp[i,6] = (dp[i,6] + dp[i-1,9]) % mod;
            dp[i,6] = (dp[i,6] + dp[i-1,13]) % mod;

            dp[i,7] = (dp[i,7] + dp[i-1,1]) % mod;
            dp[i,7] = (dp[i,7] + dp[i-1,5]) % mod;
            dp[i,7] = (dp[i,7] + dp[i-1,9]) % mod;
            dp[i,7] = (dp[i,7] + dp[i-1,13]) % mod;

            dp[i,8] = (dp[i,8] + dp[i-1,2]) % mod;
            dp[i,8] = (dp[i,8] + dp[i-1,6]) % mod;
            dp[i,8] = (dp[i,8] + dp[i-1,10]) % mod;
            dp[i,8] = (dp[i,8] + dp[i-1,14]) % mod;

            dp[i,9] = (dp[i,9] + dp[i-1,6]) % mod;
            dp[i,9] = (dp[i,9] + dp[i-1,10]) % mod;
            dp[i,9] = (dp[i,9] + dp[i-1,14]) % mod;
            dp[i,9] = (dp[i,9] - dp[i-2,2] - dp[i-2,3] + 2*mod) % mod;

            dp[i,10] = (dp[i,10] + dp[i-1,2]) % mod;
            dp[i,10] = (dp[i,10] + dp[i-1,6]) % mod;
            dp[i,10] = (dp[i,10] + dp[i-1,10]) % mod;
            dp[i,10] = (dp[i,10] + dp[i-1,14]) % mod;

            dp[i,11] = (dp[i,11] + dp[i-1,2]) % mod;
            dp[i,11] = (dp[i,11] + dp[i-1,6]) % mod;
            dp[i,11] = (dp[i,11] + dp[i-1,10]) % mod;
            dp[i,11] = (dp[i,11] + dp[i-1,14]) % mod;

            dp[i,12] = (dp[i,12] + dp[i-1,3]) % mod;
            dp[i,12] = (dp[i,12] + dp[i-1,7]) % mod;
            dp[i,12] = (dp[i,12] + dp[i-1,11]) % mod;
            dp[i,12] = (dp[i,12] + dp[i-1,15]) % mod;

            dp[i,13] = (dp[i,13] + dp[i-1,3]) % mod;
            dp[i,13] = (dp[i,13] + dp[i-1,7]) % mod;
            dp[i,13] = (dp[i,13] + dp[i-1,11]) % mod;
            dp[i,13] = (dp[i,13] + dp[i-1,15]) % mod;
            dp[i,13] = (dp[i,13] - dp[i-2,2] + mod) % mod;

            dp[i,14] = (dp[i,14] + dp[i-1,3]) % mod;
            dp[i,14] = (dp[i,14] + dp[i-1,7]) % mod;
            dp[i,14] = (dp[i,14] + dp[i-1,11]) % mod;
            dp[i,14] = (dp[i,14] + dp[i-1,15]) % mod;

            dp[i,15] = (dp[i,15] + dp[i-1,3]) % mod;
            dp[i,15] = (dp[i,15] + dp[i-1,7]) % mod;
            dp[i,15] = (dp[i,15] + dp[i-1,11]) % mod;
            dp[i,15] = (dp[i,15] + dp[i-1,15]) % mod;
        }

        long ans = 0;
        for (int i = 0;i < 16;i++){
            ans += dp[n,i];
            ans %= mod;
        }

        Console.WriteLine(ans);
    }
}


Measured memory_bytes: 13524