#include<bits/stdc++.h>
using namespace std;
int ip[10000],prime[10000];
int cnt,n;
int a[10000];
void oula(int maxx){
memset(ip,1,sizeof(ip));
ip[0]=0;
ip[1]=0;
for(int i=2;i<=maxx;i++){
if(ip[i])
prime[++cnt]=i;
for(int j=1;j<=cnt && i*prime[j]<=maxx;j++){
ip[i*prime[j]]=0;
if(i%prime[j]==0)
break;
}
}
}
int main(){
oula(10000);
cin>>n;
for(int i=2;i<=n;i++){
int ii=i;
for(int j=1;j<=i;j++){
while(ii%prime[j]==0){
a[j]++;
ii/=prime[j];
}
}
}
for(int i=1;i<=10000;i++)
if(a[i]!=0)
cout<<prime[i]<<" "<<a[i]<<endl;
return 0;
}