#include #include #define MODULUS 1000000007 #define INTERVAL 1000000 #define FACTORIALS_LEN 1001 uint32_t FACTORIALS[FACTORIALS_LEN] = { 1, 641102369, 578095319, 5832229, // Continue this with your existing data // Complete this array as per your specific data requirements }; typedef struct { uint32_t value; } Modint; Modint new_Modint(uint32_t value) { return (Modint) {value % MODULUS}; } Modint multiply_Modint(Modint a, Modint b) { uint64_t temp = (uint64_t)a.value * (uint64_t)b.value; temp %= MODULUS; return new_Modint((uint32_t)temp); } Modint factorial_Modint(uint32_t n) { if (n >= MODULUS) { return new_Modint(0); } Modint fac = new_Modint(FACTORIALS[n / INTERVAL]); for (uint32_t i = n / INTERVAL * INTERVAL + 1; i <= n; i++) { fac = multiply_Modint(fac, new_Modint(i)); } return fac; } int main() { uint32_t n; scanf("%u", &n); Modint result = factorial_Modint(n); printf("%u\n", result.value); return 0; }