留下的士兵

Time Limit: 1000 ms

Memory Limit: 65535 ms

[显示标签]

Description

N个士兵站成一行,从右到左,从1N依次编号,他们还得到一个整数M。然后这些士兵从右手边的士兵开始报数。报的数为M的倍数的士兵留在队列里,其他的士兵需要离开队列。他们重复进行这项操作直到队列中的人数小于M。举例来说,如果有10个士兵,并且M=3。第一次操作后,编号为369的士兵留在队列中。第二次操作后,编号为9的士兵留在队列中。由于队列中的士兵的数量小于M,那么编号为9的士兵就是最终留在队列里面的士兵。

现在我们想知道哪些士兵将会最终留在队列中,你能告诉我们吗?

Input

输入包含几个测试数据。每个测试数据只占单独的一行,包含两个整数n和m(3 <= n <= 10^9, 2 <= m <= n)。当n=0 并且m=0的时候标志输入结束。

Output

对于每组测试数据,输出两行。第一行包含一个整数X,表示最终留下的士兵的数量。第二行包含X个整数,表示最终留下的士兵的编号。你应该把他们按照升序输出。

Sample Input

10 3
8 3
0 0

Sample Output

1
9
2
3 6

Hint

None

Source

2010 summer1

提交代码