#include <iostream>
using std::cin, std::cout;
typedef long long ll;
ll ans = 1, modulo = 1e9 + 7;
void binary_pow(ll a, ll b)
{
ll tmp = a % modulo;
while (b > 0)
{
if (b & 1)
ans = (ans * tmp) % modulo;
tmp = (tmp * tmp) % modulo;
b >>= 1;
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
ll n, i, j, tmp;
cin >> n;
bool free[n+1];
for (i = 2; i <= n; ++i)
if (!free[i])
{
tmp = n;
j = 0;
while ((tmp /= i) > 0)
j += tmp;
binary_pow(i, j - (ll) (j & 1));
for (j = i; j <= n / i; ++j)
free[i*j] = true;
}
cout << ans;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNpbiwgc3RkOjpjb3V0Owp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKbGwgYW5zID0gMSwgbW9kdWxvID0gMWU5ICsgNzsKdm9pZCBiaW5hcnlfcG93KGxsIGEsIGxsIGIpCnsKICAgIGxsIHRtcCA9IGEgJSBtb2R1bG87CiAgICB3aGlsZSAoYiA+IDApCiAgICB7CiAgICAgICAgaWYgKGIgJiAxKQogICAgICAgICAgICBhbnMgPSAoYW5zICogdG1wKSAlIG1vZHVsbzsKICAgICAgICB0bXAgPSAodG1wICogdG1wKSAlIG1vZHVsbzsKICAgICAgICBiID4+PSAxOwogICAgfQp9CmludCBtYWluKCkKewogICAgc3RkOjppb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgY291dC50aWUobnVsbHB0cik7CiAgICBsbCBuLCBpLCBqLCB0bXA7CiAgICBjaW4gPj4gbjsKICAgIGJvb2wgZnJlZVtuKzFdOwogICAgZm9yIChpID0gMjsgaSA8PSBuOyArK2kpCiAgICAgICAgaWYgKCFmcmVlW2ldKQogICAgICAgIHsKICAgICAgICAgICAgdG1wID0gbjsKICAgICAgICAgICAgaiA9IDA7CiAgICAgICAgICAgIHdoaWxlICgodG1wIC89IGkpID4gMCkKICAgICAgICAgICAgICAgIGogKz0gdG1wOwogICAgICAgICAgICBiaW5hcnlfcG93KGksIGogLSAobGwpIChqICYgMSkpOwogICAgICAgICAgICBmb3IgKGogPSBpOyBqIDw9IG4gLyBpOyArK2opCiAgICAgICAgICAgICAgICBmcmVlW2kqal0gPSB0cnVlOwogICAgICAgIH0KICAgIGNvdXQgPDwgYW5zOwp9