#32. Addition Chains

Addition Chains

题目描述

一个与 nn 有关的整数加成序列 <a0,a1,a2,...,am><a_0,a_1,a_2,...,a_m> 满足以下四个条件:
1.a0=11.a_0=1
2.am=n2.a_m=n
3.a0<a1<a2<...<am1<am3.a_0<a_1<a_2<...<a_{m-1}<a_m
4.4. 对于每一个 k(1km)k(1≤k≤m) 都存在有两个整数 iij(0i,jk1,ij(0≤i,j≤k-1,ijj 可以相等 )) ,使得 ak=ai+aja_k=a_i+a_j
你的任务是:给定一个整数 nn ,找出符合上述四个条件的长度最小的整数加成序列。如果有多个满足要求的答案,只需要输出任意一个解即可。
举个例子,序列 <1,2,3,5><1,2,3,5><1,2,4,5><1,2,4,5> 均为 n=5n=5 时的解。

输入格式

输入包含多组数据。每组数据仅一行包含一个整数 n(1n10000)n(1≤n≤10000) 。在最后一组数据之后是一个 00

输出格式

对于每组数据,输出一行所求的整数加成序列,每个整数之间以空格隔开。

样例 #1

样例输入 #1

5
7
12
15
77
0

样例输出 #1

1 2 4 5
1 2 4 6 7
1 2 4 8 12
1 2 4 5 10 15
1 2 4 8 9 17 34 68 77