/* * Author: ttq012 * Date: 05/20/2025 */ #include #define int long long using namespace std; const int N = 500010; const int mod = 1e9 + 7; int n, cnt, a[N]; void dfs(int dep) { if (dep == n) { int ok = 1; for (int i = 0; i < n; ++i) ok &= (a[i] == a[a[i]]); cnt += ok; return; } for (int i = 0; i < n; ++i) { a[dep] = i; dfs(dep + 1); } } int fac[N], inv[N], ifac[N]; int binom(int a, int b) { if (b < 0 || a < b) return 0; return fac[a] * ifac[b] % mod * ifac[a - b] % mod; } int power(int a, int b, int c) { int ans = 1; while (b) { if (b & 1) ans = ans * a % c; a = a * a % c, b >>= 1; } return ans; } signed main() { // freopen("oncemore.in", "r", stdin); // freopen("oncemore.out", "w", stdout); cin.tie(0)->sync_with_stdio(false); cin >> n; for (int i = 0; i < 2; ++i) fac[i] = inv[i] = ifac[i] = 1; for (int i = 2; i < N; ++i) { fac[i] = fac[i - 1] * i % mod; inv[i] = mod - inv[mod % i] * (mod / i) % mod; ifac[i] = ifac[i - 1] * inv[i] % mod; } int cnt = 0; for (int i = 0; i <= n; ++i) cnt = (cnt + power(n - i, i, mod) * binom(n, i) % mod) % mod; cout << cnt << '\n'; return 0; }