public class Euler409 {
    private static final int MOD = 1000000007;

    private static int modPow(long base, long exp) {
        long result = 1;
        long cur = base % MOD;
        long e = exp;
        while (e > 0) {
            if ((e & 1L) != 0) {
                result = (result * cur) % MOD;
            }
            cur = (cur * cur) % MOD;
            e >>= 1L;
        }
        return (int) result;
    }

    public static String solve() {
        int n = 10000000;
        int pow2n = modPow(2, n);
        int totalBase = (pow2n - 1 + MOD) % MOD;

        int T = 1;
        for (int i = 0; i < n; ++i) {
            T = (int) (1L * T * ((totalBase - i + MOD) % MOD) % MOD);
        }

        int m = n / 2;

        int factN = 1;
        int factM = 1;
        for (int i = 1; i <= n; ++i) {
            factN = (int) (1L * factN * i % MOD);
            if (i <= m) {
                factM = (int) (1L * factM * i % MOD);
            }
        }
        int invFactM = modPow(factM, MOD - 2);

        int qMinus1 = (modPow(2, n - 1) - 1 + MOD) % MOD;
        int fallingQ = 1;
        for (int i = 0; i < m; ++i) {
            fallingQ = (int) (1L * fallingQ * ((qMinus1 - i + MOD) % MOD) % MOD);
        }
        int comb = (int) (1L * fallingQ * invFactM % MOD);

        if ((n & 1) == 0) {
            if ((m & 1) == 1) {
                comb = (MOD - comb) % MOD;
            }
        } else {
            if ((m & 1) == 0) {
                comb = (MOD - comb) % MOD;
            }
        }

        int S = (int) (1L * factN * comb % MOD);

        int invPow2n = modPow(pow2n, MOD - 2);
        int losing = (int) (1L * ((T + 1L * totalBase * S) % MOD) * invPow2n % MOD);
        int winning = (T - losing + MOD) % MOD;

        return String.valueOf(winning);
    }

    public static void main(String[] args) {
        System.out.println(solve());
    }
}
