Problem D: 士兵队列训练

Problem D: 士兵队列训练

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队。训练的规则为从头开始进行1至2报数,凡报2的出列,剩下的向小序号方向靠拢,再从头开始进行1至3报数,凡报到3的出列,剩下的向小序号方向靠拢,继续从头开始进行1至2报数.....以后从头开始轮流进行1至2报数、1至3报数,直到剩下的人数不超过3人时为止。

Input

包含多个测试用例,第1行为测试用例数N,接着为N行新兵人数(不超过5000)。

Output

单行输出剩下的新兵的最初编号,编号之间有一个空格。

Sample Input Copy

2
20
40

Sample Output Copy

1 7 19
1 19 37

HINT

list是一个双向链表,可以在常数时间内插入和删除,不支持数组表示法和随机访问。使用list 时,需要引入头文件#include<list>。

list的专用成员函数如下。


  • merge(b):将链表b与调用链表合并,在合并之前,两个链表必须已经排序,合并后经过排序的链表被保存在调用链表中,b为空。
  • remove(val):从链表中删除 val 的所有节点。
  • splice(pos,b):将链表b的内容插入pos的前面,b为空。
  • reverse():将链表翻转。
  • sort():将链表排序。
  • umique():将连续的相同元素压缩为单个元素。不连续的相同元素无法压缩,因此一般先排序后去重。
    其他成员函数如下。
  • push_front(x)/push_back(x):x从链表头或尾入。
  • pop_front()/pop_back():从链表头或尾出。
  • front()/back():返回链表头或尾元素。
  • insert(p,t):在p之前插入t。
  • erase(p):删除p
  • clear():清空链表。