#include constexpr std::int64_t MOD = 1e9 + 7; template constexpr T pown(T a, std::int64_t b) { const T tmp = b % 2 ? a : 1; return (b ? tmp * pown(a * a % MOD, b / 2) % MOD : 1); } template constexpr T prod(T a, T b) { return (b ? a * prod(a - 1, b - 1) % MOD : 1); } constexpr std::int64_t mdiv(std::int64_t r) { return pown(r, MOD - 2) % MOD; } template constexpr T coll(T a, T b) { return prod(a, b) * mdiv(prod(b, b)) % MOD; } int main() { std::int64_t N; std::cin >> N; std::int64_t result = 0; for (std::int64_t j : std::views::iota(1, N + 1)) { std::int64_t tmp = 0, sig = 1; for (std::int64_t i : std::views::iota(0, j + 1)) { tmp = (tmp + (MOD + coll(j, i) * pown(pown(j, 2) - i, N) * sig)) % MOD; sig *= -1; } result = (result + tmp * mdiv(prod(j, j))) % MOD; } std::cout << result << std::endl; return 0; }