#include<stdio.h>
int function(int p,int q);
int main(void){
int n;
scanf("%d",&n);
int a[n];
for (int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
int ret[100]={0};
int cnt=0;
for (int i = 0; i < n; i++)
{
int flag=1;
int order=0;
//除a[i]以外的其他数都不覆盖a[i]
while (order<n)
{
if (order==i)
{
order++;
continue;
}
if(function(a[order],a[i])){
flag=0;
}
order++;
}
if (flag)
{
ret[cnt]=a[i];
cnt++;
}
}
//由大到小排序
for (int i = 0; i < cnt-1; i++)
{
int t;
for (int j = i+1; j < cnt ; j++)
{
if (ret[i]<ret[j])
{
t=ret[i];
ret[i]=ret[j];
ret[j]=t;
}
}
}
//输出
for (int i = 0; i < cnt-1; i++)
{
printf("%d ",ret[i]);
}
printf("%d",ret[cnt-1]);
return 0;
}
//递归函数用于检测q是否被p覆盖
int function(int p,int q){
if (p==1)
{
return 0;
}else if(p==q){
return 1;
}
if(p%2)
{
p=3*p+1;
}else
{
p/=2;
}
return function(p,q);
}