#include<bits/stdc++.h>
#define MAXN 1000
using namespace std;
string to_str(int n[],int len){
string res = "";
for(int i = 0;i < len-1;i ++){
res += char(n[i] + '0');
}
if(res[0] == 0){
res.erase(0,1);
}
return res;
}
string add(string a,string b){
int int_a[MAXN],int_b[MAXN],int_res[MAXN];
string res;
memset(int_a,0,sizeof(int_a));
memset(int_b,0,sizeof(int_b));
memset(int_res,0,sizeof(int_res));
int lena = a.length(),lenb = b.length(),len = max(lena,lenb);
for(int i = 0,j = lena-1;i < lena;i ++,j --){
int_a[i] = a[j]-'0';
}
for(int i = 0,j = lenb-1;i < lenb;i ++,j --){
int_b[i] = b[j]-'0';
}
for(int i = 0;i < len;i ++){
int_res[i] = int_a[i] + int_b[i];
}
for(int i = 0;i < len;i ++){
if(int_res[i] > 9){
int_res[i+1] += int_res[i]/10;
int_res[i]%=10;
}
}
for(int i = len;i >= 0;i --){
res = res+char(int_res[i] + '0');
}
if(res[0] == '0'){
res.erase(0,1);
}
return res;
}
string mul(string a,string b){
string mul_ab = "",pro_p = "0";
int alen = a.length(),blen = b.length(),carry,pla;
for(int i = blen-1;i >= 0;i--){
carry = 0;
mul_ab = "";
int vb = b[i]-'0';
for(int j = alen-1;j >= 0;j--){
int va = a[j]-'0';
int mab = va * vb + carry;
pla = mab % 10;
mul_ab = to_string(pla) + mul_ab;
carry = (mab -pla) / 10 ;
}
if(carry != 0){
mul_ab = to_string(carry) + mul_ab;
}
for(int j = 1;j < blen - i;j++){
mul_ab = mul_ab + "0";
}
pro_p = add(pro_p, mul_ab);
mul_ab = "";
}
return pro_p;
}
string list_mul(int n[],int len){
string res = "1";
for(int i = 0;i < len;i ++){
res = mul(res,to_string(n[i]));
}
return res;
}
int main(){
int num[50],n,sum,dif,i;
scanf("%d",&n);
memset(num,0,sizeof(num));
for(i = 2;sum < n;i ++){
num[i-2] = i;
sum += i;
}
int len = i - 2;
dif = sum - n;
if(dif >= 2){
num[dif-2] = 1;
}
if(dif == 1){
num[len-1]++;
num[0]--;
}
for(int k = 0;k < len;k ++){
if(num[k] == 1){
continue;
}
if(k == len-1){
printf("%d\n",num[k]);
break;
}
printf("%d ",num[k]);
}
cout<<list_mul(num,len);
return 0;
}