There are N squares lining up in a row, numbered 1 through N from left to right. Initially, all squares are white. We also have N-1 painting machines, numbered 1 through N-1. When operated, Machine i paints Square i and i+1 black.

Snuke will operate these machines one by one. The order in which he operates them is represented by a permutation of (1, 2, ..., N-1), P, which means that the i-th operated machine is Machine P_i.

Here, the score of a permutation P is defined as the number of machines that are operated before all the squares are painted black for the first time, when the machines are operated in the order specified by P. Snuke has not decided what permutation P to use, but he is interested in the scores of possible permutations. Find the sum of the scores over all possible permutations for him. Since this can be extremely large, compute the sum modulo 10^9+7.

Constraints

* 2 \leq N \leq 10^6

Input

Input is given from Standard Input in the following format:


N


Output

Print the sum of the scores over all possible permutations, modulo 10^9+7.

Examples

Input

4


Output

16


Input

2


Output

1


Input

5


Output

84


Input

100000


Output

341429644

"""

https://atcoder.jp/contests/agc023/tasks/agc023_c

完全に無駄になる(すべて塗られている後に動く)マシンの数を数えればいい
つまり、取り除いていくことを考える
→取り除くと、その両側は取り除けない

マシンの総数は (N-1)! * (N-1)
1,N-1のマシンは取り除かれることはない

N-1 の順列のうち、隣り合う数字が選ばれる or 1,N-1が選ばれるまでに登場した数字の総数を求めよ
となる

答え = ΣΣt個取ったうえでxを取る場合
        t x
        
隣り合わないでa個取る場合にはすべてが等しい確率で含まれる…？
1234から2こ取る場合
1 3
1  4
 2 4
→違うわ　でも問題ない…？
t番目にxを取るの数を数え上げられればいい

→隣り合わないで x個取る方法 * x! * (N-1-x)!
→隣り合わないで x個取る通り数がわかればおk

dp[i][x] = i番目まで見てx個取る通り数
dp[i][x] = Σdp[j][x-1]
           j <= i-2

1つづつ置いていくことを考える
置くと置ける場所が2減る場合と1減る場合がある

最初はXこどこにでも置ける
そのうち、1減るのは2とおり、2減るのはN-2通り
次のおける集合を考える
1減るのは

=====答えを見た=====

愚直に考えればいい
各Kについて、K回目ですべて塗られているような順列の個数がわかればいい→f(K)
K回目に初めて塗られるのは f(K) - f(K-1) - f(K-2) - … - f(1)

f(K)を導出する
まず、K個のマシンを選びたい → g(K)とする
f(K) = g(K) * K! * (N-1-K)! である

g(K)を導出する
選ばれないマスはN-1-K個
隙間に選ばれないマスを入れていくことを考える

隙間はK-1個ある
ここにN-1-K個のあまりものを入れていく
nCr(K-1,N-1-K)

"""

def modfac(n, MOD):
 
    f = 1
    factorials = [1]
    for m in range(1, n + 1):
        f *= m
        f %= MOD
        factorials.append(f)
    inv = pow(f, MOD - 2, MOD)
    invs = [1] * (n + 1)
    invs[n] = inv
    for m in range(n, 1, -1):
        inv *= m
        inv %= MOD
        invs[m - 1] = inv
    return factorials, invs


def modnCr(n,r,mod,fac,inv): #上で求めたfacとinvsを引数に入れるべし(上の関数で与えたnが計算できる最大のnになる)
    if n < r:
        return 0
    return fac[n] * inv[n-r] * inv[r] % mod

N = int(input())
mod = 10**9+7

fac,inv = modfac(N+10,mod)
fsum = 0
ans = 0

for K in range(1,N):
    f = modnCr(K-1,N-1-K,mod,fac,inv) * fac[K] * fac[N-1-K]
    ans += (f - fsum) * K % mod
    fsum = f
    fsum %= mod
    ans %= mod
print (ans)






