#include <iostream>
#include <cmath>
using namespace std;
int maxcon(int n){//从2加到k的和小于n 时最大的k
int k;
k=floor((-1.0*1+pow(8*n+9,0.5))/2);
return k;
}
int n,k,modd,a[10005],len,p;
long long b[10005]={0};
void flatten(int l){//高精展平
for(int i=1;i<=l;++i){
b[i+1]+=b[i]/10;
b[i]%=10;
}
}
void highmul(int n,int len){//高精乘低精
for(int i=1;i<=len;++i){
b[i]*=n;
}
flatten(len+4);
}
int main(){
cin>>n;
k=maxcon(n);
modd=n-(k*k+k-2)/2;//2到k的和+modd=n
for(int i=1;i<=k-1;++i){
a[i]=i+1;
}
p=k-1;
for(;modd;){//从大到小逐个加一
a[p]+=1;
p--;
if(p==0)p=k-1;
modd--;
}
for(int i=1;i<=k-1;++i){
cout<<a[i]<<" ";
}cout<<endl;
b[1]=1;
len=1;
for(int i=1;i<=k-1;++i){
highmul(a[i],len+11);
for(;b[len+1];)
len++;
}
for(int i=len;i>=1;i--){
cout<<b[i];
}
return 0;
}