https://blog.csdn.net/qq_42835823/article/details/83621543
%%% cxr神仙 %%%
#include<bits/stdc++.h>
#define N 5005
using namespace std;
int m,d,ans[N],flag;
bool dfs(int u,int x){
if(u>d) return 0;
if(x<<(d-u)<m) return 0;
if(x+d-u>m) return 0;
ans[u]=x;
if(x==m) return 1;
for(int i=u;i>=1;i--)
if(dfs(u+1,x+ans[i])) return true;
return false;
}
int main(){
scanf("%d",&m);
for(d=1;;d++){if(dfs(1,1)) break;}
printf("%d\n",d);
for(int i=1;i<=d;i++) printf("%d ",ans[i]);
}