public class Euler628 {
    static final long MOD = 1008691207L;

    static long fFormula(long n) {
        if (n <= 2)
            return 0;
        long fact = 1;
        long sumFact = (n >= 4) ? 1 : 0;

        long upto = n - 4;
        for (long i = 1; i <= upto; i++) {
            fact = (fact * i) % MOD;
            sumFact = (sumFact + fact) % MOD;
        }

        long fn3 = (n == 3) ? 1 : 0, fn2 = 0, fn1 = 0, fn = 0;
        long start = Math.max(1L, upto + 1);
        for (long i = start; i <= n; i++) {
            fact = (fact * i) % MOD;
            if (i == n - 3)
                fn3 = fact;
            if (i == n - 2)
                fn2 = fact;
            if (i == n - 1)
                fn1 = fact;
            if (i == n)
                fn = fact;
        }

        long res = fn;
        res = (res - 2 * fn1) % MOD;
        res = (res - fn2) % MOD;
        res = (res - fn3) % MOD;
        res = (res + 2) % MOD;
        res = (res + (n - 3) % MOD * sumFact) % MOD;

        if (res < 0)
            res += MOD;
        return res;
    }

    public static String solve() {
        return Long.toString(fFormula(100000000));
    }

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