stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
#include<bits/stdc++.h>

#define INF 1e9

#define llINF 1e18

#define MOD 1000000007

#define pb push_back

#define mp make_pair 

#define F first

#define S second

#define ll long long

#define ull unsigned long long

#define vi vector<ll>

#define vvi vector<vi>

#define DBG_N(hoge) cerr<<" "<<(hoge)<<endl;

#define DBG cerr<<"!"<<endl;

#define BITLE(n) (1LL<<((ll)n))

#define BITCNT(n) (__builtin_popcountll(n))

#define SUBS(s,f,t) ((s).substr((f)-1,(t)-(f)+1))

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

using namespace std;

ll cnt=0;

vi A(222222);

ll lis(int n){

  vi dp(222222,llINF);

  ll now=0;

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

    ll po=(upper_bound(ALL(dp),A[i])-dp.begin());

    dp[po]=A[i];

  }

  return lower_bound(ALL(dp),llINF)-dp.begin();

}



int main(){

  cin.tie(0);

  ios::sync_with_stdio(false);

  ll n;cin>>n;

  //int hoge[n+10]={};

  A.resize(n);

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

    cin>>A[i];

  }

  reverse(ALL(A));

  cout<<lis(n)<<endl;

  return 0;

}


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

#define INF 1e9

#define llINF 1e18

#define MOD 1000000007

#define pb push_back

#define mp make_pair 

#define F first

#define S second

#define ll long long

#define vi vector<ll>

#define vvi vector<vi>

#define BITLE(n) (1LL<<((ll)n))

#define SHIFT_LEFT(n) (1LL<<((ll)n))

#define SUBS(s,f,t) ((s).substr((f),(t)-(f)))

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

using namespace std;

ll lis(vi A){

  ll n = A.size();

  vi dp(n,llINF);

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

    *upper_bound(ALL(dp),A[i]) = A[i];

  }

  return (lower_bound(ALL(dp),llINF)-dp.begin());

}

int main(){

  cin.tie(0);

  ios::sync_with_stdio(false);

  ll n;cin>>n;

  vi A(n);

  for(auto &a:A)cin>>a;

  reverse(ALL(A));

  cout<<lis(A)<<endl;

  return 0;

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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

#include<cstring>

using namespace std;



const long long int M=1e9+7;



int main()

{

    int N;

    while(cin>>N)

    {

        int a[1010];

        memset(a,0,sizeof(a));

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

        {

            int t=i;

            while(t!=1)

            {

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

                {

                    if(t%j==0)

                    {

                        a[j]++;

                        t/=j;

                        break;

                    }

                }

            }

        }

        long long sum=1;

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

        {

            sum*=a[i]+1;

            sum%=M;

        }

        cout<<sum<<endl;

    }

    return 0;

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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

#include <bits/stdc++.h>

typedef long long ll;

#define lp(i,n) for(ll i = 0;i < ll(n);i++)

#define rlp(i,n) for(ll i = ll(n);i >= 0;i--)

#define rg(i,a,b) for(ll i = ll(a);i <= ll(b);i++)

#define wh(t) while(t)

#define re return

#define pb push_back

#define sz(s) (ll)(s.size())

#define fx(n) fixed<<setprecision(n)

#define NeverGiveUp ios::sync_with_stdio(0), ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

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

#define allr(c) c.rbegin(),c.rend()

/*freopen("input.txt","r", stdin);

	freopen("output.txt","w", stdout);*/

using namespace std;

/*ll mx = INT_MIN;

ll mn = INT_MAX;*/

/*ll xd,dx[4]={1,0,-1,0};

ll yd,dy[4]={0,1,0,-1};

bool valid(ll xd,ll yd,ll n,ll m){return xd>-1&&xd<n&&yd>-1&&yd<m;}*/

const int sz = 2e6+5;

const ll md = 1e9+7;

//ll lcm(ll a,ll b){return a*b/__gcd(a,b);}

ll n,ans=1,c,num;map<ll,ll>mp;

int main()

{

    NeverGiveUp

    cin>>n;

    rg(i,2,n){

        num=i;

        for(ll j=2;j<=num;j++){

            while(!(num%j)){

                num/=j;

                mp[j]++;

            }

        }

    }

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

        ans=(ans*(mp[i]+1))%md;

    }

    cout<<ans;

    re 0;

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

#include <cstdio>

#include <cstring>

#include <algorithm>

#include <cmath>

#include <queue>

#include <stack>

#include <map>

#include <set>

#include <vector>

#include <iomanip>

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

#define dll(x) scanf("%I64d",&x)

#define xll(x) printf("%I64d\n",x)

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

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

#define rep(i,x,n) for(int i=x;i<n;i++)

#define repd(i,x,n) for(int i=x;i<=n;i++)

#define pii pair<int,int>

#define pll pair<long long ,long long>

#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

#define MS0(X) memset((X), 0, sizeof((X)))

#define MSC0(X) memset((X), '\0', sizeof((X)))

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define eps 1e-6

#define gg(x) getInt(&x)

#define db(x) cout<<"== [ "<<x<<" ] =="<<endl;

using namespace std;

typedef long long ll;

ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}

ll lcm(ll a,ll b){return a/gcd(a,b)*b;}

ll powmod(ll a,ll b,ll MOD){ll ans=1ll;while(b){if(b&1)ans=ans*a%MOD;a=a*a%MOD;b>>=1;}return ans;}

inline void getInt(int* p);

const int maxn=100010;

const int inf=0x3f3f3f3f;

/*** TEMPLATE CODE * * STARTS HERE ***/

bool noprime[maxn];

std::vector<int> p;

ll pf[122][3];

int init()

{

	MS0(noprime);

	p.clear();

	int m=(int)(sqrt(maxn+0.5));

	repd(i,2,m)

	{

		if(!noprime[i])

		{

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

			{

				noprime[j]=1;

			}

		}

	}

	repd(i,2,maxn)

	{

		if(!noprime[i])

		{

			p.pb(i);

		}

	}

	return p.size();

}

int getprifac(ll n,int len)

{

	int pos=0;

	for(int i=0;p[i]*p[i]<=n&&i<len;i++)

	{

		if(n%p[i]==0)

		{

			pf[++pos][0]=p[i];

			pf[pos][1]=0;

			while(n%p[i]==0)

			{

				pf[pos][1]++;

				n/=p[i];

			}

		}

	}

	if(n>1)

	{

		pf[++pos][0]=n;

		pf[pos][1]=1;

	}

	return pos;

}

ll getnum(ll num,ll x)

{

	if(!num)

	{

		return 0;

	}else

	{

		return num/x+getnum(num/x,x);

	}

}

const ll mod = 1e9+7ll;

int main()

{

	//    freopen("C:\\Users\\DH_M\\Desktop\\code_io\\in.txt.txt","r",stdin);

	//    freopen("C:\\Users\\DH_M\\Desktop\\code_io\\out.txt.txt","w",stdout);

	ll n;

	cin>>n;

	int len=init();

	ll ans=1ll;

	rep(i,0,len)

	{

		if(p[i]>n)

			break;



		ll cnt=getnum(n,p[i]);

		ans*=(cnt+1ll);

		ans=(ans+mod)%mod;

	}

	cout<<ans<<endl;

	

	

    return 0;

}



inline void getInt(int* p) {char ch;do {ch = getchar();} 

while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');

while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}

else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') 

{*p = *p * 10 + ch - '0';}}}

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

using namespace std;

const long long N = 1e9+7;

int x,z,i,j,a[1005];

long long ans;

int main()

{

    cin>>x;

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

    { z=i;

      for(j=2;j*j<=z;j++)

      {  while(z%j==0){z/=j;

        a[j]++;}

      }

     if(z!=1)a[z]++;

    }ans=1;

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

    {ans*=a[i]+1;ans%=N;}

    cout<<ans;

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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

using namespace std;

const long long N = 1e9+7;

int x,z,i,j,a[1005];

long long ans;

int main()

{

    cin>>x;

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

    { z=i;

      for(j=2;j*j<=z;j++)

      {  while(z%j==0){z/=j;

        a[j]++;}

      }

     if(z!=1)a[z]++;

    }ans=1;

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

    {ans*=a[i]+1;ans%=N;}

    cout<<ans;

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

#include <bits/stdc++.h>

typedef long long ll;

#define lp(i,n) for(ll i = 0;i < ll(n);i++)

#define rlp(i,n) for(ll i = ll(n);i >= 0;i--)

#define rg(i,a,b) for(ll i = ll(a);i <= ll(b);i++)

#define wh(t) while(t)

#define re return

#define pb push_back

#define sz(s) (ll)(s.size())

#define fx(n) fixed<<setprecision(n)

#define NeverGiveUp ios::sync_with_stdio(0), ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

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

#define allr(c) c.rbegin(),c.rend()

/*freopen("input.txt","r", stdin);

	freopen("output.txt","w", stdout);*/

using namespace std;

/*ll mx = INT_MIN;

ll mn = INT_MAX;*/

/*ll xd,dx[4]={1,0,-1,0};

ll yd,dy[4]={0,1,0,-1};

bool valid(ll xd,ll yd,ll n,ll m){return xd>-1&&xd<n&&yd>-1&&yd<m;}*/

const int sz = 2e6+5;

const ll md = 1e9+7;

//ll lcm(ll a,ll b){return a*b/__gcd(a,b);}

ll n,ans=1,c,num;map<ll,ll>mp;

int main()

{

    NeverGiveUp

    cin>>n;

    rg(i,2,n){

        num=i;

        for(ll j=2;j<=num;j++){

            while(!(num%j)){

                num/=j;

                mp[j]++;

            }

        }

    }

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

        ans=(ans*(mp[i]+1))%md;

    }

    cout<<ans;

    re 0;

}


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

using namespace std;

const long long N = 1e9+7;

int x,z,i,j,a[1005];

long long ans;

int main()

{

    cin>>x;

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

    { z=i;

      for(j=2;j*j<=z;j++)

      {  while(z%j==0){z/=j;

        a[j]++;}

      }

     if(z!=1)a[z]++;

    }ans=1;

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

    {ans*=a[i]+1;ans%=N;}

    cout<<ans;

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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



using namespace std;



const int M = 1e9+7,N = 1e3+1;



int freq[N];



int main()

{

    int n;long div=1;

    scanf("%d",&n);

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

    {

        int x=i;

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

        {

            while(x%j==0)

            {

            	x/=j;

                freq[j]++;

            }

        }

        if(x!=1)

          freq[x]++;

    }

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

        div*=(freq[i]+1);

        div%=M;

    }

    printf("%ld\n",div);

    return 0;

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

#include <bits/stdc++.h>

typedef long long ll;

#define lp(i,n) for(ll i = 0;i < ll(n);i++)

#define rlp(i,n) for(ll i = ll(n);i >= 0;i--)

#define rg(i,a,b) for(ll i = ll(a);i <= ll(b);i++)

#define wh(t) while(t)

#define re return

#define pb push_back

#define sz(s) (ll)(s.size())

#define fx(n) fixed<<setprecision(n)

#define NeverGiveUp ios::sync_with_stdio(0), ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

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

#define allr(c) c.rbegin(),c.rend()

/*freopen("input.txt","r", stdin);

	freopen("output.txt","w", stdout);*/

using namespace std;

/*ll mx = INT_MIN;

ll mn = INT_MAX;*/

/*ll xd,dx[4]={1,0,-1,0};

ll yd,dy[4]={0,1,0,-1};

bool valid(ll xd,ll yd,ll n,ll m){return xd>-1&&xd<n&&yd>-1&&yd<m;}*/

const int sz = 2e6+5;

const ll md = 1e9+7;

//ll lcm(ll a,ll b){return a*b/__gcd(a,b);}

ll n,ans=1,c,num;map<ll,ll>mp;

int main()

{

    NeverGiveUp

    cin>>n;

    rg(i,2,n){

        num=i;

        for(ll j=2;j<=num;j++){

            while(!(num%j)){

                num/=j;

                mp[j]++;

            }

        }

    }

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

        ans=(ans*(mp[i]+1))%md;

    }

    cout<<ans;

    re 0;

}


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



using namespace std;



const int M = 1e9+7,N = 1e3+1;



int freq[N];



int main()

{

    int n;long div=1;

    scanf("%d",&n);

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

    {

        int x=i;

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

        {

            while(x%j==0)

            {

            	x/=j;

                freq[j]++;

            }

        }

        if(x!=1)

          freq[x]++;

    }

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

        div*=(freq[i]+1);

        div%=M;

    }

    printf("%ld\n",div);

    return 0;

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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

 

using namespace std;

 

typedef long long ll;

 

const int N = 1e6+5;

 

const int mod = 1e9+7;

 

int main(){

    int x;

    cin >> x;

    map < int , int > cnt;

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

        //I

        int cur_num = i;

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

            while(cur_num % j == 0){

                cur_num /= j;

                cnt[j] ++;

            }

        }

        if(cur_num != 1){

            cnt[cur_num]++;

        }

    }

    ll ans = 1;

    map < int , int > :: iterator it = cnt.begin();

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

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

        ans %= mod;

 

    }

    cout << ans << "\n";

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

#include <bits/stdc++.h>

typedef long long ll;

#define lp(i,n) for(ll i = 0;i < ll(n);i++)

#define rlp(i,n) for(ll i = ll(n);i >= 0;i--)

#define rg(i,a,b) for(ll i = ll(a);i <= ll(b);i++)

#define wh(t) while(t)

#define re return

#define pb push_back

#define sz(s) (ll)(s.size())

#define fx(n) fixed<<setprecision(n)

#define NeverGiveUp ios::sync_with_stdio(0), ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

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

#define allr(c) c.rbegin(),c.rend()

/*freopen("input.txt","r", stdin);

	freopen("output.txt","w", stdout);*/

using namespace std;

/*ll mx = INT_MIN;

ll mn = INT_MAX;*/

/*ll xd,dx[4]={1,0,-1,0};

ll yd,dy[4]={0,1,0,-1};

bool valid(ll xd,ll yd,ll n,ll m){return xd>-1&&xd<n&&yd>-1&&yd<m;}*/

const int sz = 2e6+5;

const ll md = 1e9+7;

//ll lcm(ll a,ll b){return a*b/__gcd(a,b);}

ll n,ans=1,c,num;map<ll,ll>mp;

int main()

{

    NeverGiveUp

    cin>>n;

    rg(i,2,n){

        num=i;

        for(ll j=2;j<=num;j++){

            while(!(num%j)){

                num/=j;

                mp[j]++;

            }

        }

    }

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

        ans=(ans*(mp[i]+1))%md;

    }

    cout<<ans;

    re 0;

}


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

 

using namespace std;

 

typedef long long ll;

 

const int N = 1e6+5;

 

const int mod = 1e9+7;

 

int main(){

    int x;

    cin >> x;

    map < int , int > cnt;

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

        //I

        int cur_num = i;

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

            while(cur_num % j == 0){

                cur_num /= j;

                cnt[j] ++;

            }

        }

        if(cur_num != 1){

            cnt[cur_num]++;

        }

    }

    ll ans = 1;

    map < int , int > :: iterator it = cnt.begin();

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

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

        ans %= mod;

 

    }

    cout << ans << "\n";

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



#include <bits/stdc++.h>



using namespace std;



typedef long long ll ;



const int MOD = 1000000007;

const int INF = 30 * 1000 + 20;

const int MAXN = 2600;

const int MLOG = 18;

const int NMAX = 60;



#define int ll

#define pb push_back

#define pp pop_back

#define X first

#define Y second

#define IO ios_base::sync_with_stdio(false);

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

#define ct(x) const_cast<const int&>(x)



vector<int> primes;



bool prime(int x){

	for(int a : primes){

		if(x%a==0){

			return false;

		}

	}

	return true;

}



int32_t main(){

	primes.pb(2);

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

		if(prime(i)){

			primes.pb(i);

		}

	}

	int n;

	cin >> n;

	int ans = 1;

	int kk[primes.size()]={};



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

		int a = i;

		for(int j=0;j<sz(primes);j++){

			while(a % primes[j]==0){

				a/=primes[j];

				kk[j]++;

			}

		}

	}	

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

//		if(kk[i] > 0)

//			cout << primes[i] << ' ' << kk[i] << endl;

		ans *= kk[i] + 1;

		ans %= MOD;

	}

	cout << ans;

}

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

 

using namespace std;

 

const int M = 1e9+7,N = 1e3+1;

 

int freq[N];

 

int main()

{

    int n;long div=1;

    scanf("%d",&n);

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

    {

        int x=i;

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

        {

            while(x%j==0)

            {

            	x/=j;

                freq[j]++;

            }

        }

        if(x!=1)

          freq[x]++;

    }

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

        div*=(freq[i]+1);

        div%=M;

    }

    printf("%ld\n",div);

    return 0;

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

#include <bits/stdc++.h>

typedef long long ll;

#define lp(i,n) for(ll i = 0;i < ll(n);i++)

#define rlp(i,n) for(ll i = ll(n);i >= 0;i--)

#define rg(i,a,b) for(ll i = ll(a);i <= ll(b);i++)

#define wh(t) while(t)

#define re return

#define pb push_back

#define sz(s) (ll)(s.size())

#define fx(n) fixed<<setprecision(n)

#define NeverGiveUp ios::sync_with_stdio(0), ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);

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

#define allr(c) c.rbegin(),c.rend()

/*freopen("input.txt","r", stdin);

	freopen("output.txt","w", stdout);*/

using namespace std;

/*ll mx = INT_MIN;

ll mn = INT_MAX;*/

/*ll xd,dx[4]={1,0,-1,0};

ll yd,dy[4]={0,1,0,-1};

bool valid(ll xd,ll yd,ll n,ll m){return xd>-1&&xd<n&&yd>-1&&yd<m;}*/

const int sz = 2e6+5;

const ll md = 1e9+7;

//ll lcm(ll a,ll b){return a*b/__gcd(a,b);}

ll n,ans=1,c,num;map<ll,ll>mp;

int main()

{

    NeverGiveUp

    cin>>n;

    rg(i,2,n){

        num=i;

        for(ll j=2;j<=num;j++){

            while(!(num%j)){

                num/=j;

                mp[j]++;

            }

        }

    }

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

        ans=(ans*(mp[i]+1))%md;

    }

    cout<<ans;

    re 0;

}


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

 

using namespace std;

 

const int M = 1e9+7,N = 1e3+1;

 

int freq[N];

 

int main()

{

    int n;long div=1;

    scanf("%d",&n);

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

    {

        int x=i;

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

        {

            while(x%j==0)

            {

            	x/=j;

                freq[j]++;

            }

        }

        if(x!=1)

          freq[x]++;

    }

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

        div*=(freq[i]+1);

        div%=M;

    }

    printf("%ld\n",div);

    return 0;

}