#include<bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
int mu[40005]; // mu[i] = x --> i^j với j = x;
long long POW(long long a, long long b){ // tinh (a^b) % mod
if(b == 0) return 1;
if(b == 1) return a;
long long t = POW(a, b / 2);
if(b % 2 == 0) return t * t % mod;
return t * t % mod * a % mod;
}
int main()
{
ios_base::sync_with_stdio(0);
cout.tie(0); cin.tie(0);
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
int n; cin >> n;
// mu[2] = 1 --> 2^1
// khi * 4 vao 3! --> mu[2] = 3
// 4! = 2 * 3 * 4 = 2^3 * 3^1 --> mu[2] = 3; mu[3] = 1
// 5! --> mu[2] = 3; mu[3] = 1; mu[5] = 1
for(int num = 2; num <= n; num++){
int temp = num;
for(int i = 2; i * i <= temp; i++){
while(temp % i == 0){
mu[i]++;
temp /= i;
}
}
if(temp != 1) mu[temp]++;
}
long long res = 1;
for(int num = 2; num <= n; num++){
bool ok = true;
for(int i = 2; i * i <= num; i++){
if(num % i == 0){
ok = false;
break;
}
}
if(ok){
if(mu[num] % 2 == 1){
mu[num]--;
}
res = (res * POW(num, mu[num])) % mod;
// cout << num << " " << mu[num] << '\n';
}
}
cout << res;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIG1vZCA9IDFlOSArIDc7CmludCBtdVs0MDAwNV07IC8vIG11W2ldID0geCAtLT4gaV5qIHbhu5tpIGogPSB4OwoKbG9uZyBsb25nIFBPVyhsb25nIGxvbmcgYSwgbG9uZyBsb25nIGIpeyAvLyB0aW5oIChhXmIpICUgbW9kCiAgICAgaWYoYiA9PSAwKSByZXR1cm4gMTsKICAgICBpZihiID09IDEpIHJldHVybiBhOwogICAgIGxvbmcgbG9uZyB0ID0gUE9XKGEsIGIgLyAyKTsKICAgICBpZihiICUgMiA9PSAwKSByZXR1cm4gdCAqIHQgJSBtb2Q7CiAgICAgcmV0dXJuIHQgKiB0ICUgbW9kICogYSAlIG1vZDsKfQppbnQgbWFpbigpCnsKICAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgIGNvdXQudGllKDApOyBjaW4udGllKDApOwogICAgIGZyZW9wZW4oInRlc3QuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgZnJlb3BlbigidGVzdC5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICAgaW50IG47IGNpbiA+PiBuOwogICAgIC8vIG11WzJdID0gMSAtLT4gMl4xCiAgICAgLy8ga2hpICogNCB2YW8gMyEgLS0+IG11WzJdID0gMwogICAgIC8vIDQhID0gMiAqIDMgKiA0ID0gMl4zICogM14xIC0tPiBtdVsyXSA9IDM7IG11WzNdID0gMQogICAgIC8vIDUhIC0tPiBtdVsyXSA9IDM7IG11WzNdID0gMTsgbXVbNV0gPSAxCiAgICAgZm9yKGludCBudW0gPSAyOyBudW0gPD0gbjsgbnVtKyspewogICAgICAgICAgaW50IHRlbXAgPSBudW07CiAgICAgICAgICBmb3IoaW50IGkgPSAyOyBpICogaSA8PSB0ZW1wOyBpKyspewogICAgICAgICAgICAgICB3aGlsZSh0ZW1wICUgaSA9PSAwKXsKICAgICAgICAgICAgICAgICAgICBtdVtpXSsrOwogICAgICAgICAgICAgICAgICAgIHRlbXAgLz0gaTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYodGVtcCAhPSAxKSBtdVt0ZW1wXSsrOwogICAgIH0KCiAgICAgbG9uZyBsb25nIHJlcyA9IDE7CiAgICAgZm9yKGludCBudW0gPSAyOyBudW0gPD0gbjsgbnVtKyspewogICAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgICBmb3IoaW50IGkgPSAyOyBpICogaSA8PSBudW07IGkrKyl7CiAgICAgICAgICAgICAgIGlmKG51bSAlIGkgPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmKG9rKXsKICAgICAgICAgICAgICAgaWYobXVbbnVtXSAlIDIgPT0gMSl7CiAgICAgICAgICAgICAgICAgICAgbXVbbnVtXS0tOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIHJlcyA9IChyZXMgKiBQT1cobnVtLCBtdVtudW1dKSkgJSBtb2Q7Ci8vICAgICAgICAgICAgICAgY291dCA8PCBudW0gPDwgIiAiIDw8IG11W251bV0gPDwgJ1xuJzsKICAgICAgICAgIH0KICAgICB9CiAgICAgY291dCA8PCByZXM7Cgp9CgoKCgoKCgoKCg==