题目描述
KEY 公司开发出一种新的保险箱。要打开保险箱,不需要钥匙,但需要输入一个正确的、由 n 位数字组成的密码。当正确地输入最后一位密码后,保险箱就立刻打开了。保险箱上没有“确定”键。当你输入超过 n 位数字,则只有最后 n 位数字有效。例如,对一种 4 位数字编码的型号,如果正确的编码为 4567,你想输入的编码为 1234567890,则保险箱的门会在你输入数字 7 后马上就打开了。
为了达到这种效果所需要设计的软件其实很简单:
- 对 n 位数字编码的型号,保险箱始终处于 10(n−1) 种内部状态之一。
- 保险箱的当前状态只需用最后输入的 n−1 位数字表示,其中有一种状态(例如,对前面的例子,就是
456)被记为“开锁状态”。
- 如果保险箱处于“开锁状态”,且输入最后一位正确的数字(例如,在上面的例子中就是
7),保险箱的门就打开了;
- 否则保险箱切换到对应的新状态。
例如,如果保险箱的当前状态为 456,接着输入 8,则保险箱的状态切换到 568。
开保险箱的一个繁琐的策略是一位接一位地输入所有可能的编码。然而,在最坏情况下,这需要按键 n×10n 次。而选择一个好的数字序列,最多只需要按键 10n+n−1 次就可以打开保险箱。你需要做的就是找到一个数字序列包含所有的 n 位数一次且仅一次。
KEY 公司宣称,对军用型号(n=6),当今最快的计算机也需要数十亿年的时间才能找到这样的数字序列,但是很显然,他们不知道有些程序员能在几分钟就能找到这样的数字序列。
输入描述
- 输入文件中包含多个测试数据。每个测试数据为一个整数 n(1≤n≤6)。
- 输入文件最后一行为
0,表示输入结束。
输出描述
- 对输入文件中的每个测试数据,输出一行包含 10n+n−1 位的数字序列,使得每个 n 位数出现一次且仅一次。