#include<bits/stdc++.h> #define int long long #define ull unsigned long long #define maxn 305 #define put() putchar('\n') #define Tp template<typename T> #define Ts template<typename T,typename... Ar> usingnamespace std; Tp voidread(T &x){ int f=1;x=0;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} x*=f; } namespace Debug{ Tp void _debug(char* f,T t){cerr<<f<<'='<<t<<endl;} Ts void _debug(char* f,T x,Ar... y){while(*f!=',') cerr<<*f++;cerr<<'='<<x<<",";_debug(f+1,y...);} #define gdb(...) _debug((char*)#__VA_ARGS__,__VA_ARGS__) }usingnamespace Debug; #define fi first #define se second #define mk make_pair constint mod=1e9+7; intpower(int x,int y=mod-2){ int sum=1; while (y) { if (y&1) sum=sum*x%mod; x=x*x%mod;y>>=1; } return sum; } constint inf=1e18; int n,m; int f[maxn],g[maxn],tot,ans[maxn],cnt; signedmain(void){ // freopen("1.in","r",stdin); int i,j; read(n); f[1]=1,f[2]=1;m=2; for (i=3;f[i-1]<=n;i++) f[i]=f[i-1]+f[i-2],m=i; int now=n; while (now) { int it=lower_bound(f+1,f+1+m,now+1)-f-1; now-=f[it]; g[++tot]=it; }//贪心拆分 for (i=1;i<=tot;i++) { if (i>1) { for (j=g[i-1]-1;j>=g[i];j--) ans[++cnt]=(j%2?3:4); } for (j=i;j<=tot&&g[j]==g[i];j++) if (g[i]&1) ans[++cnt]=1; else ans[++cnt]=2; } i=tot+1; for (j=g[i-1]-1;j>=g[i]+1;j--) ans[++cnt]=(j%2?3:4); for (printf("%lld\n",cnt),i=1;i<=cnt;i++) printf("%lld\n",ans[i]); return0; }