#include #include #include using namespace std; const int M = 1000000007; const int N = 1000006; long long c[N], h[N], rev[N]; long long extend_gcd(long long a, long long b, long long &x, long long &y) { if (a==0&&b==0) return -1ll; if (b==0) { x=1ll; y=0ll; return a; } long long d=extend_gcd(b, a%b, y, x); y-=a/b*x; return d; } long long mod_reverse(long long a, long long n) { long long x, y, d=extend_gcd(a, n, x, y); if (d==1) return (x%n+n)%n; else return -1ll; } void solve() { int n; scanf("%d", &n); int t = 0; c[0] = 1; c[1] = n; for (int i=(n&1)+2; i<=n; i+=2) { c[i] = c[i-2]*rev[i]%M*rev[i-1]%M*(n-i+1)%M*(n-i+2)%M; } long long ans = 0; for (int i=n&1; i<=n; i+=2) { ans = (ans+( c[i]*h[(n-i)/2] % M )) % M; } printf("%I64d\n", ans); } int main() { for (int i=1; i