#522. Addition Chains

Addition Chains

题目描述

满足如下条件的序列 X X (序列中元素标号为 1、2、3 ... m)被称为“加成序列”:

  1. X[1]=1 X[1] = 1
  2. X[m]=n X[m] = n
  3. X[1]<X[2]<<X[m1]<X[m] X[1] < X[2] < \ldots < X[m-1] < X[m]
  4. 对于每个 k k (2km 2 \leq k \leq m ) 都存在两个整数 i i j j (1i,jk1 1 \leq i, j \leq k-1 i i j j 可相等),使得 X[k]=X[i]+X[j] X[k] = X[i] + X[j]

你的任务是:给定一个整数 n n ,找出符合上述条件的长度 m m 最小的“加成序列”。

如果有多个满足要求的答案,只需要找出任意一个可行解。

输入格式

输入包含多组测试用例。

每组测试用例占一行,包含一个整数 n n

当输入为单行的 0 时,表示输入结束。

输出格式

对于每个测试用例,输出一个满足需求的整数序列,数字之间用空格隔开。

每个输出占一行。

5
7
12
15
77
0
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

数据范围

1n100 1 \leq n \leq 100