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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

#include <cmath>

using namespace std;



const int inf = 1e9+7;

int a[100007];

int n;

long long ans;



int main(){

	

	cin >> n;

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

		int x = i;

		for(int j = 2;j<=x;j++){

			while(x%j==0){

				a[j]++;

				x/=j;

			}

		}

	}

	ans = 1;

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

		if(a[i]){

			ans*=(a[i]+1)%inf;

			ans%=inf;

		}

	}

	cout << ans;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

#include <cmath>

using namespace std;



const int inf = 1e9+7;

int a[1007];

int n;

long long ans;



int main(){

	

	cin >> n;

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

		int x = i;

		for(int j = 2;j<=sqrt(n);j++){

			while(x%j==0){

				a[j]++;

				x/=j;

			}

		}

		if(x>1) a[x]++;

	}

	ans = 1;

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

		if(a[i]){

			ans*=(a[i]+1)%inf;

			ans%=inf;

		}

	}

	cout << ans;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.8109999969309758x):
//https://vjudge.net/contest/286896



#include <iostream>

#include <cstdio>

#include <set>

#include <list>

#include <vector>

#include <stack>

#include <queue>

#include <map>

#include <string>

#include <sstream>

#include <algorithm>

#include <cstring>

#include <cstdlib>

#include <cctype>

#include <cmath>



/*int a[20000];

// int main()

// {

//     int g[10];

//     memset(g,0,sizeof(g));

//     int temp, digit, n, i, j = 0;

//     std::cin >> n;

//     a[0] = 1;

//     digit = 1;

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

//     {

//         int num = 0;

//         for (j = 0; j < digit; j++)

//         {

//             temp = a[j] * i + num;

//             a[j] = temp % 10;

//             num =temp/ 10;

//         }

//         while (num)

//         {

//             a[digit] = num % 10;

//             num /= 10;

//             digit++;

//         }

//     }

//     for (i = digit - 1; i >= 0; i--)

//         std::cout << a[i];

//     return 0;

// }这段代码是大数阶乘

*/

long long mod=1000000007;

int prime[1005];//1000以内的素数

int cnt=0;//素数个数

bool vi[1005];

int main(){

    int n;

    std::cin>>n;

    long long ans=1;

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

        if(!vi[i]){

            prime[cnt++]=i;

        }

        for(int j=0;j<cnt;j++){

            if(i*prime[j]>n) break;

            vi[i*prime[j]]=1;

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

        }

    }//线性素数筛

    long long num[1005]={0};

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

        int nu=i;

        for(int j=0;j<cnt;j++){

            if(nu==1)

                break;

            else

            {

                while(nu%prime[j]==0){

                    nu/=prime[j];

                    num[prime[j]]++;

                }

            }

        }

    }

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

        ans*=num[prime[i]]+1;

        ans%=mod;

    }

    std::cout<<ans<<std::endl;

    return 0;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 1.6411180861357249x):
//### In The Name Of GOD ###



//%% Remember; (((He))) is The (((Accepter))) %%



// GOD IS GREATER ...



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;

typedef long double ld ;



#define int ll

#define pb push_back

#define bp pop_back

#define pf push_front

#define fp pop_front

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

#define sz(a) (int)(a.size())

#define sg(a, b) (a + b - 1) / b



const int MOD = 1000 * 1000 * 1000 + 7;

const int INF = 8 * 1000 * 1000 + 200;

const int MAXN = 1000 + 1;

const int MLOG = 18;

const int NMAX = 20;



vector<int> prime;



int is_p(int a){

	for(int i : prime)

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

	return true;

}



signed main(){

	IO;

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

		if(is_p(i)) prime.pb(i);

	}

	//cout << prime[0] << prime[1] << prime[2] << prime[3];

	int cnt[sz(prime)] = {};

	int n;

	cin >> n;

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

		int r = l;

		for(int i = 0; i < sz(prime); i++){

			while(r % prime[i] == 0) {

				cnt[i]++;

				r /= prime[i];

			}

		}

	}

	int ans = 1;

	for(int i = 0; i < sz(prime); i++){

		ans *= ++cnt[i];

		ans %= MOD;

	}

	cout << ans;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

using namespace std;



#define df(b, e) ((b) > (e))

#define fore(i, b, e) for(auto i = (b) - df(b, e); i != e - df(b, e); i += 1 - 2 * df(b, e))

#define sz(x) (int) x.size()

#define all(x) x.begin(), x.end()

#define f first

#define s second

#define pb push_back



typedef long long lli;

typedef long double ld;

typedef pair<int, int> ii;



template <class T>

struct rge { T b, e; };



template <class T>

rge<T> range(T i, T j) {

  return rge<T>{i, j};

}



template <class T> auto dud(T *x) -> decltype(cerr << *x, 0);

template <class T> char dud(...);



struct debug {

#ifdef LOCAL

  ~debug() { cout << endl; }



  template <class T>

  typename enable_if<sizeof dud<T>(0) != 1, debug &>::type operator << (T i) {

    cout << boolalpha << i;

    return *this;

  }



  template <class T>

  typename enable_if<sizeof dud<T>(0) == 1, debug &>::type operator << (T i) {

    return *this << range(begin(i), end(i));

  }



  template <class A, class B>

  debug & operator << (pair<A, B> d) {

    return *this << "(" << d.first << ", " << d.second << ")";

  }



  template <class T>

  debug & operator << (rge<T> d) {

    *this << "[";

    for (auto it = d.b; it != d.e; ++it)

      *this << ", " + 2 * (it == d.b) << *it;

    return *this << "]";

  }

#else

  template <class T> 

  debug & operator << (const T&) {

    return *this; 

  }

#endif

};



#define deb(...) " " << #__VA_ARGS__ ": " << (__VA_ARGS__) << " "



const int N = 1e3 + 5;

const lli mod = 1e9 + 7;



bitset<N> isp;

vector<int> primes;

int n;



lli factorialFactors(int n) {

  lli divs = 1LL;

  for (lli p: primes) {

    if (n < p)

      break;

    lli mul = 1LL, k = 0;

    while (mul <= n / p) {

      mul *= p;

      k += n / mul;

    }

    (divs *= (k + 1)) %= mod;

  }

  return divs;

}



int main() {

  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

  isp.set();

  fore (i, 2, N) if (isp[i]) {

    primes.pb(i);

    if (1LL * i * i < N)

      for (int j = i * i; j < N; j += i)

        isp[j] = 0;

  }

  while (cin >> n)

    cout << factorialFactors(n) << '\n';

  return 0;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

using namespace std;



typedef long long ll;

typedef pair<int, int> pii;

typedef pair<int, pii> pipii;

typedef pair<pii, int> piipi;

typedef pair<pii, pii> piipii;



#define mp make_pair

#define fi first

#define se second

#define all(a) (a).begin(), (a).end()

#define sz(a) (int)(a).size()

#define eb emplace_back

const int mod = 1e9+7;



bool vis[1005];

int main(){

    int n;

    scanf("%d", &n);

    int ans = 1;

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

        if(vis[i]) continue;

        int res = 0;

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

            vis[j] = 1;

            int x = j, cnt = 0;

            while(x%i == 0) x/=i, cnt++;

            res += cnt;

        }

        ans = ans*1ll*(res+1)%mod;

    }

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

}
// Slower C++ solution:
//### In The Name Of GOD ###



//%% Remember; (((He))) is The (((Accepter))) %%



// GOD IS GREATER ...



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;

typedef long double ld ;



#define int ll

#define pb push_back

#define bp pop_back

#define pf push_front

#define fp pop_front

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

#define sz(a) (int)(a.size())

#define sg(a, b) (a + b - 1) / b



const int MOD = 1000 * 1000 * 1000 + 7;

const int INF = 8 * 1000 * 1000 + 200;

const int MAXN = 1000 + 1;

const int MLOG = 18;

const int NMAX = 20;



vector<int> prime;



int is_p(int a){

	for(int i : prime)

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

	return true;

}



signed main(){

	IO;

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

		if(is_p(i)) prime.pb(i);

	}

	//cout << prime[0] << prime[1] << prime[2] << prime[3];

	int cnt[sz(prime)] = {};

	int n;

	cin >> n;

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

		int r = l;

		for(int i = 0; i < sz(prime); i++){

			while(r % prime[i] == 0) {

				cnt[i]++;

				r /= prime[i];

			}

		}

	}

	int ans = 1;

	for(int i = 0; i < sz(prime); i++){

		ans *= ++cnt[i];

		ans %= MOD;

	}

	cout << ans;

}

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

using namespace std;



typedef long long ll;

typedef pair<int, int> pii;

typedef pair<int, pii> pipii;

typedef pair<pii, int> piipi;

typedef pair<pii, pii> piipii;



#define mp make_pair

#define fi first

#define se second

#define all(a) (a).begin(), (a).end()

#define sz(a) (int)(a).size()

#define eb emplace_back

const int mod = 1e9+7;



bool vis[1005];

int main(){

    int n;

    scanf("%d", &n);

    int ans = 1;

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

        if(vis[i]) continue;

        int res = 0;

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

            vis[j] = 1;

            int x = j, cnt = 0;

            while(x%i == 0) x/=i, cnt++;

            res += cnt;

        }

        ans = ans*1ll*(res+1)%mod;

    }

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

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

typedef long long ll;

using namespace std;

//bool is_prime(ll x){

//if(x<=1) return 0;

//for(int i=2;i*i<=x;i++){

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

//}

//return 1;

//}

ll mod=1e9+7;

int main(){

ll x;

cin>>x;

map<ll,ll> mp;

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

    int cur_num=i;

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

        while(cur_num%j==0){

            mp[j]++;

            cur_num/=j;

        }



        }

          if(cur_num!=1){

            mp[cur_num]++;

    }



    }

    ll div=1;

    for(auto it:mp){

        div*= it.second+1;

        div %= mod;



    }

    cout<<div;

}
// Slower C++ solution:
//### In The Name Of GOD ###



//%% Remember; (((He))) is The (((Accepter))) %%



// GOD IS GREATER ...



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;

typedef long double ld ;



#define int ll

#define pb push_back

#define bp pop_back

#define pf push_front

#define fp pop_front

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

#define sz(a) (int)(a.size())

#define sg(a, b) (a + b - 1) / b



const int MOD = 1000 * 1000 * 1000 + 7;

const int INF = 8 * 1000 * 1000 + 200;

const int MAXN = 1000 + 1;

const int MLOG = 18;

const int NMAX = 20;



vector<int> prime;



int is_p(int a){

	for(int i : prime)

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

	return true;

}



signed main(){

	IO;

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

		if(is_p(i)) prime.pb(i);

	}

	//cout << prime[0] << prime[1] << prime[2] << prime[3];

	int cnt[sz(prime)] = {};

	int n;

	cin >> n;

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

		int r = l;

		for(int i = 0; i < sz(prime); i++){

			while(r % prime[i] == 0) {

				cnt[i]++;

				r /= prime[i];

			}

		}

	}

	int ans = 1;

	for(int i = 0; i < sz(prime); i++){

		ans *= ++cnt[i];

		ans %= MOD;

	}

	cout << ans;

}

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

typedef long long ll;

using namespace std;

//bool is_prime(ll x){

//if(x<=1) return 0;

//for(int i=2;i*i<=x;i++){

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

//}

//return 1;

//}

ll mod=1e9+7;

int main(){

ll x;

cin>>x;

map<ll,ll> mp;

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

    int cur_num=i;

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

        while(cur_num%j==0){

            mp[j]++;

            cur_num/=j;

        }



        }

          if(cur_num!=1){

            mp[cur_num]++;

    }



    }

    ll div=1;

    for(auto it:mp){

        div*= it.second+1;

        div %= mod;



    }

    cout<<div;

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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

#include <algorithm>

#include<map>

using namespace std;

const long long mod = 1e9 + 7;

int solveitabdo(long long x)

{

	map<long long, long long>max1;

	for (long long i = 1; i <= x; i++)

	{

		long long num = i;

		for (long long j = 2; j*j <= num ; j++)

		{

			while (num % j == 0)

			{

				num /= j;

				max1[j]++;



			}

		}

		if (num != 1)

		{

			max1[num]++;

		}

	}

	long long ans = 1;

	map<long long, long long> ::iterator it = max1.begin();

	for (; it != max1.end(); it++)

	{

		ans *= (it)->second + 1;

		ans %= mod;

	}

	return ans;

}

int main()

{

	long long x;

	cin >> x ;

	cout<<solveitabdo(x);

}
// Slower C++ solution:
//### In The Name Of GOD ###



//%% Remember; (((He))) is The (((Accepter))) %%



// GOD IS GREATER ...



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;

typedef long double ld ;



#define int ll

#define pb push_back

#define bp pop_back

#define pf push_front

#define fp pop_front

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

#define sz(a) (int)(a.size())

#define sg(a, b) (a + b - 1) / b



const int MOD = 1000 * 1000 * 1000 + 7;

const int INF = 8 * 1000 * 1000 + 200;

const int MAXN = 1000 + 1;

const int MLOG = 18;

const int NMAX = 20;



vector<int> prime;



int is_p(int a){

	for(int i : prime)

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

	return true;

}



signed main(){

	IO;

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

		if(is_p(i)) prime.pb(i);

	}

	//cout << prime[0] << prime[1] << prime[2] << prime[3];

	int cnt[sz(prime)] = {};

	int n;

	cin >> n;

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

		int r = l;

		for(int i = 0; i < sz(prime); i++){

			while(r % prime[i] == 0) {

				cnt[i]++;

				r /= prime[i];

			}

		}

	}

	int ans = 1;

	for(int i = 0; i < sz(prime); i++){

		ans *= ++cnt[i];

		ans %= MOD;

	}

	cout << ans;

}

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

#include <algorithm>

#include<map>

using namespace std;

const long long mod = 1e9 + 7;

int solveitabdo(long long x)

{

	map<long long, long long>max1;

	for (long long i = 1; i <= x; i++)

	{

		long long num = i;

		for (long long j = 2; j*j <= num ; j++)

		{

			while (num % j == 0)

			{

				num /= j;

				max1[j]++;



			}

		}

		if (num != 1)

		{

			max1[num]++;

		}

	}

	long long ans = 1;

	map<long long, long long> ::iterator it = max1.begin();

	for (; it != max1.end(); it++)

	{

		ans *= (it)->second + 1;

		ans %= mod;

	}

	return ans;

}

int main()

{

	long long x;

	cin >> x ;

	cout<<solveitabdo(x);

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

#define ll long long

using namespace std;

const int mod = 1e9 + 7;

int main(){

	ll n,x,count=1;

	ll num[101000]={0};

	cin>>n;

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

		x=i;

		for(int j=2;j<=x;j++){

			while(x%j==0){ 

				num[j]++;

				num[j]%=mod; 

				x/=j;

			}

		}

		if(x!=1)

			num[x]++;

	}

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

		if(num[i])

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

	}

	cout<<count;

	return 0;

}


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



using namespace std;

const int mod = 1e9+7;

int main(){

    long long x,n,i,j,c;

    cin >> x;

    map <long long, long long > fa;

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

        for( j = 2; j*j <=n; j++){

            while(n%j == 0){

                n=n/j;

                fa[j]++;}}



        if(n!= 1){

            fa[n]++;}}

    c = 1;

    map < long long,long long > :: iterator it = fa.begin();

    for(; it != fa.end(); it++){

        c = (c * ((it)->second + 1)) % mod;

        c %= mod;



    }

    cout << c << endl;

}
// Slower C++ solution:
//### In The Name Of GOD ###



//%% Remember; (((He))) is The (((Accepter))) %%



// GOD IS GREATER ...



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;

typedef long double ld ;



#define int ll

#define pb push_back

#define bp pop_back

#define pf push_front

#define fp pop_front

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

#define sz(a) (int)(a.size())

#define sg(a, b) (a + b - 1) / b



const int MOD = 1000 * 1000 * 1000 + 7;

const int INF = 8 * 1000 * 1000 + 200;

const int MAXN = 1000 + 1;

const int MLOG = 18;

const int NMAX = 20;



vector<int> prime;



int is_p(int a){

	for(int i : prime)

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

	return true;

}



signed main(){

	IO;

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

		if(is_p(i)) prime.pb(i);

	}

	//cout << prime[0] << prime[1] << prime[2] << prime[3];

	int cnt[sz(prime)] = {};

	int n;

	cin >> n;

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

		int r = l;

		for(int i = 0; i < sz(prime); i++){

			while(r % prime[i] == 0) {

				cnt[i]++;

				r /= prime[i];

			}

		}

	}

	int ans = 1;

	for(int i = 0; i < sz(prime); i++){

		ans *= ++cnt[i];

		ans %= MOD;

	}

	cout << ans;

}

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



using namespace std;

const int mod = 1e9+7;

int main(){

    long long x,n,i,j,c;

    cin >> x;

    map <long long, long long > fa;

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

        for( j = 2; j*j <=n; j++){

            while(n%j == 0){

                n=n/j;

                fa[j]++;}}



        if(n!= 1){

            fa[n]++;}}

    c = 1;

    map < long long,long long > :: iterator it = fa.begin();

    for(; it != fa.end(); it++){

        c = (c * ((it)->second + 1)) % mod;

        c %= mod;



    }

    cout << c << endl;

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

#include<string.h>



using namespace std;



int main()

{

    char line[50];

    cin.getline(line,50);

    char a,b,c,d;

    int count=0;

    for(int i=0;i<strlen(line);i++)

    {

        if(line[i]==' ')

        {

            if(count==0)

            {

            a=line[i-1];

            b=line[i+1];

            count=1;

            }

            else

            {

              c=line[i-1];

              d=line[i+1];

            }

        }

    }

    if(a==b && c==d)

    {

        cout<<"YES";

    }

    else{

        cout<<"NO";

    }

    return 0;

}




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

#include<string.h>



typedef long long ll;			//ld.

typedef unsigned long long ull;	//llu.





int main(){

	char a[15];

	char b[15];

	char c[15];

	scanf("%s %s %s",a,b,c);

	int ada = 0;

	if(a[strlen(a)-1]==b[0]&&b[strlen(b)-1]==c[0])

		ada=1;

	if(ada==1)

		printf("YES\n");

	else

		printf("NO\n");

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

#include <string.h>



using namespace std;



int main()

{

    char a[20],b[20],c[20];

    int x,y;

    cin>>a>>b>>c;

    x=strlen(a);

    y=strlen(b);

    if(a[x-1]==b[0])

    {

        if(b[y-1]==c[0])

        {

            cout<<"YES";

        }

        else

        {

            cout<<"NO";

        }

    }

    else

    {

        cout<<"NO";

    }

    return 0;

}


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

#include<string.h>



typedef long long ll;			//ld.

typedef unsigned long long ull;	//llu.





int main(){

	char a[15];

	char b[15];

	char c[15];

	scanf("%s %s %s",a,b,c);

	int ada = 0;

	if(a[strlen(a)-1]==b[0]&&b[strlen(b)-1]==c[0])

		ada=1;

	if(ada==1)

		printf("YES\n");

	else

		printf("NO\n");

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

#include<string.h>



using namespace std;



int main()

{

    char line[50];

    cin.getline(line,50);

    char a,b,c,d;

    int count=0;

    for(int i=0;i<strlen(line);i++)

    {

        if(line[i]==' ')

        {

            if(count==0)

            {

            a=line[i-1];

            b=line[i+1];

            count=1;

            }

            else

            {

              c=line[i-1];

              d=line[i+1];

            }

        }

    }

    if(a==b && c==d)

    {

        cout<<"YES";

    }

    else{

        cout<<"NO";

    }

    return 0;

}




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

#include <string.h>



int main() {

	char A[101];

	char B[101];

	char C[101];

	scanf("%s %s %s", &A, &B, &C);

	if (A[(strlen(A)-1)] == B[0] && B[(strlen(B)-1)] == C[0] ) {

		printf("YES\n");

	}

	else {

		printf("NO\n");

	}

	return 0;

}