#include <iostream>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX_N = 350;
long long fact[MAX_N + 1];
long long derange[MAX_N + 1];
void preprocess() {
    fact[0] = 1;
    for (int i = 1; i <= MAX_N; i++) {
        fact[i] = (fact[i - 1] * i) % MOD;
    }
    if (MAX_N >= 1) derange[1] = 0;
    if (MAX_N >= 2) derange[2] = 1;
    for (int i = 3; i <= MAX_N; i++) {
        derange[i] = ((i - 1) * (derange[i - 1] + derange[i - 2]) % MOD) % MOD;
    }
}
int main() {
    preprocess();
    int N;
    cin >> N;
    long long result = (fact[N] - derange[N] + MOD) % MOD; // Ensure non-negative result
    cout << result << endl;
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |