#include<cstdio>
#include<cstring>
#include<cmath>
int p,lenb=1,lena=1;
const int N=1300;
int a[N],b[N];
void add1(){
int mol[N]={0};
memset(mol,0,sizeof(mol));
for(int i=1;i<=lena;++i){
int x=0;
for(int j=1;j<=lenb;++j){
mol[i+j-1]=mol[i+j-1]+a[i]*b[j]+x;
x=mol[i+j-1]/10;
mol[i+j-1]%=10;
}
mol[i+lenb]=x;
}
if(lena<=500){
lena+=lenb;
while(mol[lena]==0&&lenb>1) lena--;
}
for(int i=1;i<=lena;++i) a[i]=mol[i];
}
void add2(){
int mol[N]={0};
memset(mol,0,sizeof(mol));
for(int i=1;i<=lenb;++i){
int x=0;
for(int j=1;j<=lenb;++j){
mol[i+j-1]=mol[i+j-1]+b[i]*b[j]+x;
x=mol[i+j-1]/10;
mol[i+j-1]%=10;
}
mol[i+lenb]=x;
}
if(lenb<=500){
lenb*=2;
while(mol[lenb]==0&&lenb>1) lenb--;
}
for(int i=1;i<=lenb;++i) b[i]=mol[i];
}
signed main(){
scanf("%d",&p);
printf("%d\n",(int)(log10(2)*p+1));
b[1]=2;
a[1]=1;
while(p){
if(p%2==1) add1();
p=p>>1;
add2();
}
a[1]--;
for(int i=500;i>0;i--){
if(i!=500&&i%50==0) printf("\n");
printf("%d",a[i]);
}
}