import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
/**
* author:djch
* date:2021/5/25
*
* @author djch*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt();
scanner.nextLine(); //nextInt不带换行符
int[] nums = new int[k];
HashSet<Integer> hashSet = new HashSet<Integer>(); //创建哈希集,保存遇到的数字
for(int i = 0; i<k; i++){
nums[i]=scanner.nextInt();
}
int[] copy = new int[k]; //创建一个初始读取的数组,nums用来保存3n+1执行后的更改
for(int x = 0; x<copy.length; x++){
copy[x] = nums[x]; //如果使用copy=nums,将会指向同一个地址,修改copy时nums也会修改
}
for(int i = 0;i<nums.length; i++){
while (nums[i] != 1) {
if(nums[i]%2==0){
nums[i]/=2;
if(!hashSet.contains(nums[i])){hashSet.add(nums[i]);} //记录覆盖的数字
else {
continue; //如果遇到相同数字,说明之后的数字也会相同,可以直接跳过
}
}
else{
nums[i]=(nums[i]*3+1)/2;
if(!hashSet.contains(nums[i])){hashSet.add(nums[i]);}
else {
continue; //同上
}
}
}
}
for(int j =0; j<copy.length; j++){
if(hashSet.contains(copy[j])){copy[j]=0;} //如果存在,将数组内容赋0作为标记
}
Arrays.sort(copy); //由于sort方法从小到大,需要反向
for(int a = 0; a< copy.length; a++){
if(copy[k-a-1]!=0){
System.out.print(copy[k-a-1]);
if(copy[k-a-2]!=0){ System.out.print(" "); } //为满足格式,最后一位后没有空格
}
else{
System.out.println("");break;} //格式需要
}
}
}