#include<iostream>
using namespace std;
int n, len, num[20], ans[20];
void dfs(int dep){
int i;
if(dep > len) return; // 剪枝1。
if(num[dep-1] == n){
if(dep < len){
len = dep;
for(i = 0; i < dep; i ++)
ans[i] = num[i];
}
return;
}
for(i = dep-1; i >= 0; i --){ // 从后往前搜,时间复杂度会降低很多,这里不证了。
num[dep] = num[i] + num[dep-1];
if(num[dep] > n) continue; // 剪枝2。
dfs(dep + 1);
}
}
int main(){
int i;
while(cin >> n && n != 0){
len = 11;
num[0] = 1;
dfs(1);
for(i = 0; i < len; i ++)
cout << ans[i] << ' ';
cout << endl;
}
return 0;
}