public class Euler960 {

    static final long K_MOD = 1000000007L;

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

    static long fMod(int n) {
        long[] fact = new long[n + 1];
        long[] invFact = new long[n + 1];

        fact[0] = 1L;
        for (int i = 1; i <= n; ++i) {
            fact[i] = (fact[i - 1] * i) % K_MOD;
        }

        invFact[n] = modPow(fact[n], K_MOD - 2L);
        for (int i = n; i >= 1; --i) {
            invFact[i - 1] = (invFact[i] * i) % K_MOD;
        }

        long sum = 0L;
        for (int k = 1; k < n; ++k) {
            long w = Math.min(k, n - k);
            long term = (fact[n] * invFact[k]) % K_MOD;
            term = (term * invFact[n - k]) % K_MOD;
            term = (term * w) % K_MOD;
            term = (term * modPow(k, k - 1)) % K_MOD;
            term = (term * modPow(n - k, n - k - 1)) % K_MOD;
            sum = (sum + term) % K_MOD;
        }

        long inv2 = (K_MOD + 1L) / 2L;
        sum = (sum * inv2) % K_MOD;
        return (fact[n - 1] * sum) % K_MOD;
    }

    public static String solve() {
        return Long.toString(fMod(100));
    }

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