#include <bits/stdc++.h>
const int MX = 2e5 + 7;
const int mod = 1e9 + 7;
const double pi = 3.1415926535897932384;
double isp = 1e-13;
using namespace std;
long long qpow(long long a, long long b, long long MOD = mod) {
  for (long long ans = 1;; a = a * a % MOD, b >>= 1) {
    if (b & 1) ans = ans * a % MOD;
    if (!b) return ans;
  }
}
long long inv(long long a, long long MOD = mod) {
  return qpow(a, MOD - 2, MOD);
}
long long exgcd(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1, y = 0;
    return a;
  }
  long long ret = exgcd(b, a % b, y, x);
  y -= a / b * x;
  return ret;
}
long long getInv(int a, int mod) {
  long long x, y;
  long long d = exgcd(a, mod, x, y);
  return d == 1 ? (x % mod + mod) % mod : -1;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  long long n;
  cin >> n;
  long long ans = 1;
  for (int i = 1; i <= n; i++) {
    ans = ans * i % mod;
  }
  ans -= qpow(2, n - 1);
  ans += mod;
  cout << ans % mod << '\n';
}
