import java.util.Arrays;

public class Euler720 {
    static final long kMod = 1000000007L;

    public static String solve() {
        int exponent = 25;

        if (exponent == 1)
            return "1";
        if (exponent == 2)
            return "3";

        int target = 1 << exponent;
        int[] perm = new int[target];
        int[] lehmer = new int[target];

        perm[0] = 1;
        perm[1] = 3;
        perm[2] = 2;
        perm[3] = 4;
        lehmer[0] = 0;
        lehmer[1] = 1;
        lehmer[2] = 0;
        lehmer[3] = 0;

        int n = 4;

        while (n < target) {
            for (int i = n - 1; i >= 1; --i) {
                int out = n + i;
                perm[out] = 2 * perm[i];
                lehmer[out] = lehmer[i];
            }

            perm[n] = 2 * perm[n - 1] - 1;
            lehmer[n] = n - 2;

            perm[n - 1] = 2 * perm[0];
            lehmer[n - 1] = 0;

            for (int i = n - 2; i >= 0; --i) {
                lehmer[i] = perm[i] - 1 + lehmer[i];
                perm[i] = 2 * perm[i] - 1;
            }

            n *= 2;
        }

        long rank = 1;
        long fact = 1;
        for (int i = target - 1, k = 0; i >= 0; --i, ++k) {
            rank = (rank + (long) lehmer[i] * fact) % kMod;
            fact = (fact * (k + 1)) % kMod;
        }

        return Long.toString(rank);
    }

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