1 /*Problem Description
 2 当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数,5,8,4,2称为覆盖数。
 3 现在输入n个数字a[i],根据关键数与覆盖数的理论,我们只需要验证其中部分数就可以确定所有数满足xxx定律,输出输入的n个数中的关键数。
 4 如果其中有多个关键数的话按照其输入顺序的逆序输出。 
 5 Input
 6 输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中:
 7 1<=n<=500
 8 1<a[i]<=1000 
 9 Output
10 请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。 
11 Sample Input
12 3
13 3 8 4
14 5
15 3 8 4 7 15
16 5
17 3 8 4 15 7
18 0
19 
20 Sample Output
21 3
22 15 7 3
23 7 15 3 */
24 #include<stdio.h>
25 int main()
26 {
27     int n , s[501] , i , m ,c[501] ,t;
28     while(scanf("%d",&n) != EOF && n)
29     {
30         for(i=0;i<n;i++)
31         {
32              scanf("%d",&s[i]);
33         }
34         for(i=0;i<n;i++)
35         {
36              t=s[i];
37              if(t==0)continue;
38              while(t != 1)
39              {
40                 if(t % 2 == 0)
41                 t /= 2;
42                 else
43                 {
44                     t = 3 * t + 1 ;
45                     t /= 2;
46                 }
47                 for(m=0;m<n;m++)
48                 {
49                     if(t==s[m])
50                     s[m]=0;
51                 }
52             } 
53         }
54         m=0;
55         for(i=n-1;i>=0;i--)
56         {
57             if(! s[i])
58             continue;
59             else
60             {
61                 c[m]=s[i];
62                 m+=1;
63             }
64         }
65         for(i=0;i<m-1;i++)
66         {printf("%d ",c[i]);}
67           printf("%d\n",c[m-1]);
68     }
69     return 0;
70 }