stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include <iostream>

#include <cmath>

#include <map>

#define ll long long

const int mod = 1e9+7;

using namespace std;

map<int,int>m;

void fcount(ll x){

  ll i=2;

  while(x>1){

    if(x%i==0){

      while(x%i==0){

        m[i]++;

        x/=i;

      }

    }

    i++;

  }//cout<<"1"<<endl;

}

ll shu(){

  ll ans=1;

  map<int,int>::iterator it;

  for(it = m.begin();it!=m.end();++it){

    //cout<<(*it).first<<' '<<(*it).second<<endl;

    ans=(ans%mod*((*it).second+1))%mod;

  }

  return ans;

}

int main(){

  int n;

  ll sum=1,ans=0;

  cin>>n;

  for(int i=1;i<=n;i++){

    fcount(i);

  }

  //cout<<sum<<endl;

  cout<<shu()<<endl;

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.26791868589442x):
#include<stdio.h>

#define MD (1000000007)

int f[1010];

int main(){

	int n,ans=1;

	scanf("%d",&n);

	for (int i=2;i<=n;i++){

		if (!f[i]){

			int s=0;

			for (int k=n/i;k>0;k/=i){

				s+=k;

			}

			ans=1ll*ans*(s+1)%MD;

			for (int j=i*i;j<=n;j+=i){

				f[j]=1;

			}

		}

	}

	printf("%d\n",ans);

}
// Slower C++ solution:
#include<cmath>

#include<iostream> 

#define ll long long

//参考阶乘因数公式； 

using namespace std;

ll cal(ll n,ll p){

	if(n<p)return 0;

	else return (n/p+cal(n/p,p));

}ll prime(ll x){

	ll q=sqrtl(x);

	for(ll i=2;i<=q;i++)

	if(x%i==0)return 0;

	return 1;

}

int main()

{

	ll n,s=1;

	cin>>n;

	for(ll i=2;i<=n;i++){

		if(prime(i)){

		s*=(cal(n,i)+1);

		s%=1000000007;

		}

	}cout<<s;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.239082937329444x):
#include<stdio.h>

#define MD (1000000007)

int f[1010];

int main(){

	int n,ans=1;

	scanf("%d",&n);

	for (int i=2;i<=n;i++){

		if (!f[i]){

			int s=0;

			for (int k=n/i;k>0;k/=i){

				s+=k;

			}

			ans=1ll*ans*(s+1)%MD;

			for (int j=i*i;j<=n;j+=i){

				f[j]=1;

			}

		}

	}

	printf("%d\n",ans);

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <vector>

#include <map>

#include <cstdlib>

#include <set>

#include <queue>

using namespace std;



#define X first

#define Y second

#define N 1010

typedef long long ll;

typedef pair<int,int> pii;

const int Mod=1000000007;



const double INF=1e18;



bool flag[N];

int p[N],b[N];



void work(int x)

{

	for (int i=1;i<=p[0] && p[i]<=x;i++)

	{

		while (x%p[i]==0) x/=p[i],b[i]++;

	}

}



int main()

{

	//freopen("in.in","r",stdin);

	//freopen("out.out","w",stdout);

	

	int n,ans=1; cin >> n;

	for (int i=2;i<N;i++)

	{

		if (!flag[i]) p[++p[0]]=i;

		for (int j=1;j<=p[0] && i*p[j]<N;j++)

		{

			flag[i*p[j]]=true;

			if (i%p[j]==0) break;

		}

	}

	for (int i=2;i<=n;i++) work(i);

	for (int i=1;i<=p[0];i++) ans=1ll*ans*(b[i]+1)%Mod;

	cout<<ans<<endl;

	return 0;



}


// Faster C++ solution for the same problem (measured speedup: 5.315644996236003x):
#include<stdio.h>

#define MD (1000000007)

int f[1010];

int main(){

	int n,ans=1;

	scanf("%d",&n);

	for (int i=2;i<=n;i++){

		if (!f[i]){

			int s=0;

			for (int k=n/i;k>0;k/=i){

				s+=k;

			}

			ans=1ll*ans*(s+1)%MD;

			for (int j=i*i;j<=n;j+=i){

				f[j]=1;

			}

		}

	}

	printf("%d\n",ans);

}
// Slower C++ solution:
#include <iostream>

#include <cmath>

#include <map>

#define ll long long

const int mod = 1e9+7;

using namespace std;

map<int,int>m;

void fcount(ll x){

  ll i=2;

  while(x>1){

    if(x%i==0){

      while(x%i==0){

        m[i]++;

        x/=i;

      }

    }

    i++;

  }//cout<<"1"<<endl;

}

ll shu(){

  ll ans=1;

  map<int,int>::iterator it;

  for(it = m.begin();it!=m.end();++it){

    //cout<<(*it).first<<' '<<(*it).second<<endl;

    ans=(ans%mod*((*it).second+1))%mod;

  }

  return ans;

}

int main(){

  int n;

  ll sum=1,ans=0;

  cin>>n;

  for(int i=1;i<=n;i++){

    fcount(i);

  }

  //cout<<sum<<endl;

  cout<<shu()<<endl;

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.24483803015864x):
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

typedef long long ll;

const int mm=1000000007,lim=1005;

int i,j,k,n,m,ans,a[1111];

int main(){

	while (scanf("%d",&n)!=EOF){

		ans=1;

		for (i=1;i<=n;i++) a[i]=i;

		for (i=2;i<=n;i++){

			for (j=1,k=0;j<=n;j++)

			 for (;a[j]%i==0;a[j]/=i) k++;

			ans=(ll)ans*(ll)(k+1)%mm;

		}

		printf("%d\n",ans);

	}

	return 0;

}
// Slower C++ solution:
#include<cmath>

#include<iostream> 

#define ll long long

//参考阶乘因数公式； 

using namespace std;

ll cal(ll n,ll p){

	if(n<p)return 0;

	else return (n/p+cal(n/p,p));

}ll prime(ll x){

	ll q=sqrtl(x);

	for(ll i=2;i<=q;i++)

	if(x%i==0)return 0;

	return 1;

}

int main()

{

	ll n,s=1;

	cin>>n;

	for(ll i=2;i<=n;i++){

		if(prime(i)){

		s*=(cal(n,i)+1);

		s%=1000000007;

		}

	}cout<<s;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.216128621430172x):
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

typedef long long ll;

const int mm=1000000007,lim=1005;

int i,j,k,n,m,ans,a[1111];

int main(){

	while (scanf("%d",&n)!=EOF){

		ans=1;

		for (i=1;i<=n;i++) a[i]=i;

		for (i=2;i<=n;i++){

			for (j=1,k=0;j<=n;j++)

			 for (;a[j]%i==0;a[j]/=i) k++;

			ans=(ll)ans*(ll)(k+1)%mm;

		}

		printf("%d\n",ans);

	}

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <vector>

#include <map>

#include <cstdlib>

#include <set>

#include <queue>

using namespace std;



#define X first

#define Y second

#define N 1010

typedef long long ll;

typedef pair<int,int> pii;

const int Mod=1000000007;



const double INF=1e18;



bool flag[N];

int p[N],b[N];



void work(int x)

{

	for (int i=1;i<=p[0] && p[i]<=x;i++)

	{

		while (x%p[i]==0) x/=p[i],b[i]++;

	}

}



int main()

{

	//freopen("in.in","r",stdin);

	//freopen("out.out","w",stdout);

	

	int n,ans=1; cin >> n;

	for (int i=2;i<N;i++)

	{

		if (!flag[i]) p[++p[0]]=i;

		for (int j=1;j<=p[0] && i*p[j]<N;j++)

		{

			flag[i*p[j]]=true;

			if (i%p[j]==0) break;

		}

	}

	for (int i=2;i<=n;i++) work(i);

	for (int i=1;i<=p[0];i++) ans=1ll*ans*(b[i]+1)%Mod;

	cout<<ans<<endl;

	return 0;



}


// Faster C++ solution for the same problem (measured speedup: 5.292355234284995x):
#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

typedef long long ll;

const int mm=1000000007,lim=1005;

int i,j,k,n,m,ans,a[1111];

int main(){

	while (scanf("%d",&n)!=EOF){

		ans=1;

		for (i=1;i<=n;i++) a[i]=i;

		for (i=2;i<=n;i++){

			for (j=1,k=0;j<=n;j++)

			 for (;a[j]%i==0;a[j]/=i) k++;

			ans=(ll)ans*(ll)(k+1)%mm;

		}

		printf("%d\n",ans);

	}

	return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cmath>

#include <map>

#define ll long long

const int mod = 1e9+7;

using namespace std;

map<int,int>m;

void fcount(ll x){

  ll i=2;

  while(x>1){

    if(x%i==0){

      while(x%i==0){

        m[i]++;

        x/=i;

      }

    }

    i++;

  }//cout<<"1"<<endl;

}

ll shu(){

  ll ans=1;

  map<int,int>::iterator it;

  for(it = m.begin();it!=m.end();++it){

    //cout<<(*it).first<<' '<<(*it).second<<endl;

    ans=(ans%mod*((*it).second+1))%mod;

  }

  return ans;

}

int main(){

  int n;

  ll sum=1,ans=0;

  cin>>n;

  for(int i=1;i<=n;i++){

    fcount(i);

  }

  //cout<<sum<<endl;

  cout<<shu()<<endl;

  return 0;

}


// Faster C++ solution for the same problem (measured speedup: 4.063161225279006x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include<cmath>

#include<iostream> 

#define ll long long

//参考阶乘因数公式； 

using namespace std;

ll cal(ll n,ll p){

	if(n<p)return 0;

	else return (n/p+cal(n/p,p));

}ll prime(ll x){

	ll q=sqrtl(x);

	for(ll i=2;i<=q;i++)

	if(x%i==0)return 0;

	return 1;

}

int main()

{

	ll n,s=1;

	cin>>n;

	for(ll i=2;i<=n;i++){

		if(prime(i)){

		s*=(cal(n,i)+1);

		s%=1000000007;

		}

	}cout<<s;

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 4.04092012733176x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include <iostream>

#include <cstdio>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <vector>

#include <map>

#include <cstdlib>

#include <set>

#include <queue>

using namespace std;



#define X first

#define Y second

#define N 1010

typedef long long ll;

typedef pair<int,int> pii;

const int Mod=1000000007;



const double INF=1e18;



bool flag[N];

int p[N],b[N];



void work(int x)

{

	for (int i=1;i<=p[0] && p[i]<=x;i++)

	{

		while (x%p[i]==0) x/=p[i],b[i]++;

	}

}



int main()

{

	//freopen("in.in","r",stdin);

	//freopen("out.out","w",stdout);

	

	int n,ans=1; cin >> n;

	for (int i=2;i<N;i++)

	{

		if (!flag[i]) p[++p[0]]=i;

		for (int j=1;j<=p[0] && i*p[j]<N;j++)

		{

			flag[i*p[j]]=true;

			if (i%p[j]==0) break;

		}

	}

	for (int i=2;i<=n;i++) work(i);

	for (int i=1;i<=p[0];i++) ans=1ll*ans*(b[i]+1)%Mod;

	cout<<ans<<endl;

	return 0;



}


// Faster C++ solution for the same problem (measured speedup: 4.09997266926063x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>



using namespace std;



int T[1010],prime[1010],cnt;

bool ok[1010];

typedef long long LL;

LL MOD = 1000000007;



int main()

{	

	memset(ok,true,sizeof(ok));

	for (int i=2;i<=1000;i++)

	{

		if (ok[i]) prime[++cnt]=i;

		for (int j=2*i;j<=1000;j+=i)ok[j]=false;

	}

	//for (int i=1;i<=cnt;i++)printf("%d\n",prime[i]);

	int N;

	scanf("%d",&N);

	for (int i=1;i<=N;i++)

	{

		int tmp=i;

		for (int j=1;j<=cnt;j++)

		{

			while(tmp%prime[j]==0)

			{

				tmp/=prime[j];

				T[j]++;

			}

		}

	}

	LL ans=1;

	for (int i=1;i<=cnt;i++)ans=ans*LL(T[i]+1)%MOD;

	cout<<ans<<endl;

}

// Faster C++ solution for the same problem (measured speedup: 4.096958349540878x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include <iostream>

using namespace std;

#define LL long long



const LL MOD = 1e9 + 7;

LL n;



LL get(LL x, LL y)

{

    LL ret = 0;

    while(x >= y) {

        ret += x / y;

        x /= y;

    }

    return ret;

}





bool prime(int x)

{

    if(x < 2) return false;

    if(x == 2) return true;

    if(x % 2 == 0) return false;

    for(int i=3;i*i<=x;i+=2) if(x % i == 0) return false;

    return true;

}



int main()

{



    while(cin >> n){

        LL ans = 1;

        for(int i=2;i<=n;i++){

            if(!prime(i)) continue;

            LL dv = get(n, i);

//            cout << i << ' ' << dv << '\n';

            ans = (ans * (dv + 1LL)) % MOD;

        }

        cout << ans << '\n';

    }

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 4.049833804155407x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;



#define mod 1000000007

#define SIZE 10000000



vector<int>prime;



bool marked[SIZE];

int p[SIZE];

int e[SIZE];



bool isPrime(int n) {

  if (n < 2) return false;

  if (n == 2) return true;

  if (n % 2 == 0) return false;

  return marked[n] == false;

}



void sieve(int n) {

    int sqrtn = (int)sqrt(n);

  for (int i = 3; i <= sqrtn; i+=2) {

    if (marked[i] == false) {

      for (int j = i * i; j <= n; j += i + i) {

        marked[j] = true;

      }

    }

  }

}





int main(){



    int n;



    cin>>n;



    sieve(n);



    if(n>=2) prime.push_back(2);



    for(int i=3;i<=n;i=i+2){

        if(isPrime(i)) prime.push_back(i);

    }





    int p = prime.size();



    //cout<<p<<"\n";



    long long fac = 1;



    for(int i=0;i<p;i++){

        //cout<<prime[i]<<" : ";

        long long sum = 1;

        long long pow = 1;

        for(long long j=1;pow*prime[i]<=n;j++){

            pow = pow*prime[i];

            //cout<<"("<<pow<<") ";

            long long k = n/pow;

            sum = sum + k;

            //cout<<k<<" "<<sum;

        }





        fac = ((fac % mod) * (sum % mod))%mod ;



        //cout<<" "<<fac<<"\n";



    }



    cout<<fac<<"\n";





}


// Faster C++ solution for the same problem (measured speedup: 4.09410506571285x):
//#include <bits/stdc++.h>

#include<cstdio>

#include<math.h>

#include<algorithm>

using namespace std;

typedef long long LL;



const int mod=1e9+7;



int a[1010],num;

LL bit[1010];



bool isprime(int x){

    if(x==1) return false;

    int q=sqrt(x);

    for(int i=2;i<=q;i++)

        if(x%i==0) return false;

    return true;

}



void init(){

    num=0;

    for(int i=1;i<=1000;i++)

        if(isprime(i)) a[num++]=i;

}



void solve(int n){

    for(int i=0;i<num;i++){

        if(n%a[i]) continue;

        while(n%a[i]==0){

            bit[i]++;

            n/=a[i];

        }

    }

}



int main()

{

    int n;

    scanf("%d",&n);

    if(n==1){

        puts("1");

        return 0;

    }

    init();

    for(int i=0;i<num;i++)

        bit[i]=1;

    for(int i=2;i<=n;i++){

        solve(i);

    }

    LL ans=1;

    for(int i=0;i<num;i++){

        ans=ans*bit[i]%mod;

    }

    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



long long int N, a, an = 1, i, j;

long long int p[168] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};



int main(){

    scanf("%lld", &N);

    for(i = 0; i < 168 && p[i] <= N; ++i, a = 0){

        for(j = p[i]; j <= N; j *= p[i]){

            a += N / j;

        }

        an *= a + 1;

        an %= 1000000007;

    }

    cout << an << endl;

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 5.220721922178587x):
#include <cstdio>

using namespace std;

 

long long N, a, an = 1, i, j;

constexpr int p[168] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};

 

int main(){

    scanf("%lld", &N);

    for(i = 0; i < 168 && p[i] <= N; ++i, a = 0){

        for(j = p[i]; j <= N; j *= p[i]){

            a += N / j;

        }

        an = an * (a + 1) % 1000000007;

    }

    printf("%lld", an);

    return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>



#define FOR(i,a,b) for(int i=(a);i<(b);++i)

#define REP(i,n)   FOR(i,0,n)

long long INF = 1e18;

const int MOD = 1e9 + 7;



using namespace std;



int main(){

    int n;

    long long ans=1;

    scanf("%d",&n);

    map<int,int> res;



    for(int k=2;k<=n;++k){

        int nk=k;

        FOR(i,2,i*i){

            while(nk%i==0){

                ++res[i];

                nk/=i;

            }

        }

        if(nk!=1) res[nk] = 1;

    }



    for(auto itr=res.begin();itr!=res.end();++itr){

        ans = ans * (itr->second+1) % MOD;

    }



    printf("%lld\n",ans);

    return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.6236027410234954x):
#include<bits/stdc++.h>



#define FOR(i,a,b) for(int i=(a);i<(b);++i)

#define REP(i,n)   FOR(i,0,n)

long long INF = 1e18;

const int MOD = 1e9 + 7;



using namespace std;



int main(){

    vector<pair<int,int>> prime;

    int n,a=2;

    long long ans=1;

    scanf("%d",&n);



    while(a<=n){

        int k=a;

        for(int i=0;k!=1&&i<prime.size();){

            if(k%prime[i].first){

                ++i;

                continue;

            }else{

                if(prime[i].first==0) printf("#%d!\n",i);

                k/=prime[i].first;

                ++prime[i].second;

            }

        }

        if(k!=1) prime.push_back(make_pair(k,1));

        ++a;

    }



    REP(i,prime.size()) ans = ans*(prime[i].second+1)%MOD;



    printf("%lld\n",ans);

    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

#define N 100020

#define zyy 1000000007

#define ll long long

using namespace std;

inline int read(){

	int x=0,f=1;char ch=getchar();

	while(ch>'9'||ch<'0')ch=='-'&&(f=0)||(ch=getchar());

	while(ch<='9'&&ch>='0')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();

	return f?x:-x;

}

int pri[N], cnt, mark[N], pnt[N];

void split(int x) {

	for (int i = 1; i <= cnt && x > 1; i++) {

		while (x % pri[i] == 0) {

			pnt[i] ++;

			x /= pri[i];

		}

	}

}

int main(int argc, char const *argv[]) {

	int n = read();

	for (int i = 2; i <= n; i++) {

		if (!mark[i]) pri[++cnt] = i;

		for (int j = 1; j <= cnt && i * pri[j] <= n; j++) {

			mark[i * pri[j]] = 1;

			if (i % pri[j] == 0) break;

		}

	}

	for (int i = 2; i <= n; i++)

		split(i);

	ll ans = 1;

	for (int i = 1; i <= cnt; i++)

		ans = ans * (pnt[i] + 1) % zyy;

	printf("%lld\n", ans);

	return 0;

}

// Faster C++ solution for the same problem (measured speedup: 5.068100662663256x):
#include<cstdio>

#include<cstring>

using namespace std;

#define ll long long

const int mod = 1e9 +7;

int n,num[1005];

void fun()

{

    memset(num,0,sizeof num);

    for (int i = 2; i <= n; i++)

    {

        int temp = i;

        for (int j = 2; j <= i; j++)

        {

            while(temp % j == 0)

            {

                num[j]++;

                temp /= j;

            }

            if(!temp)break;

        }

    }

}

int main()

{

    while(~scanf("%d",&n))

    {

        fun();

        ll ans = 1;

        for (int i = 2; i <= n; i++)

        {

            ans = ans * (num[i] + 1) % mod;

        }

        printf("%lld\n",ans);

    }

}