#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
int data;
bool covered;
} str;
void Callatz(str* arr, int n, int K);
int Find(str* arr, int val, int K);
void bubble(int* brr);
int main()
{
int K, i;
int flag = 0;
scanf("%d", &K);
str* arr = (str*)malloc(sizeof(str) * K);
for (i = 0; i < K; i++) {
scanf("%d", &arr[i].data);
arr[i].covered = false;
}
for (i = 0; i < K; i++) {
Callatz(arr, arr[i].data, K);
}
int brr[100] = { 0 };
int cnt = 0;
for (i = 0; i < K; i++) {
if (!arr[i].covered) {
brr[i] = arr[i].data;
cnt++;
}
}
bubble(brr);
for (i = 0; i < cnt; i++) {
if (i == 0)
printf("%d", brr[i]);
else
printf(" %d", brr[i]);
}
free(arr);
return 0;
}
void Callatz(str* arr, int n, int K)
{
int tmp;
while (n != 1) {
if (n % 2 == 0) {
n /= 2;
}
else {
n = (3 * n + 1) / 2;
}
tmp = Find(arr, n, K);
if (tmp < K)
arr[tmp].covered = true;
}
}
int Find(str* arr, int val, int K)
{
int i;
for (i = 0; i < K; i++) {
if (arr[i].data == val && arr[i].covered == false)
return i;
}
return K;
}
void bubble(int* brr)
{
int i, j;
for (i = 99; i > 0; i--) {
int flag = 0;
for (j = 0; j < i; j++) {
if (brr[j] < brr[j + 1]) {
int tmp = brr[j];
brr[j] = brr[j + 1];
brr[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0)
break;
}
}