using ll = long long;constexpr int P = 1000000007;// assume -P <= x < 2Pint norm(int x) { if (x < 0) x += P; else if (x >= P) x -= P; return x; }// 快速幂template <class T> T power(T a, int b) { T res = 1; for (; b; b /= 2, a *= a) { if (b % 2) { res *= a; } } return res; }struct Int { int x; Int(int x = 0) : x(norm(x)) {} int val() const { return x; } Int operator-() const { return Int(norm(P - x)); } Int inv() const { assert(x != 0); return power(*this, P - 2); } Int &operator*=(const Int &rhs) { x = ll(x) * rhs.x % P; return *this; } Int &operator+=(const Int &rhs) { x = norm(x + rhs.x); return *this; } Int &operator-=(const Int &rhs) { x = norm(x - rhs.x); return *this; } Int &operator/=(const Int &rhs) { return *this *= rhs.inv(); } friend Int operator*(const Int &lhs, const Int &rhs) { Int res = lhs; res *= rhs; return res; } friend Int operator+(const Int &lhs, const Int &rhs) { Int res = lhs; res += rhs; return res; } friend Int operator-(const Int &lhs, const Int &rhs) { Int res = lhs; res -= rhs; return res; } friend Int operator/(const Int &lhs, const Int &rhs) { Int res = lhs; res /= rhs; return res; } friend ostream& operator << (ostream& out, const Int &x) { out << x.val(); return out; }};// 阶乘和逆元Int fac[N], inv[N];inline Int C(int A, int B){ return fac[A] * inv[B] * inv[A - B]; }/*** main ***/// 搞清楚 n 的范围n = N - 1;fac[0] = 1;for(int i = 1; i <= n; i++) fac[i] = fac[i-1] * i;inv[n] = fac[n].inv();for(int i = n - 1; i >= 0; i--) inv[i] = inv[i+1] * (i + 1);/*** endmain ***/