#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void test(vector<long long> &dane) {
	//sortowanie klasyczne
	sort(dane.begin(), dane.end());
	for(auto x : dane) {
		cout << x << " ";
	}
	cout << endl;
	//sortowanie Szarkowskiego
	sort(dane.begin(), dane.end(),
		[](auto v1, auto v2) {
			int k1=0, k2=0;
			while(v1%2==0) {
				v1/=2;
				k1+=1;
			}
			while(v2%2==0) {
				v2/=2;
				k2+=1;
			}
			//porównywanie
			if(v1==1 && v2==1)
				return k1>k2;
			if(v1==1 || v2==1)
				return v2==1;
			//v1!=1 && v2!=1
			if(k1!=k2) return k1<k2;
			//k1==k2
			return v1<v2;
		}
	);
	for(auto x : dane) {
		cout << x << " ";
	}
	cout << endl;
}

int main(int argc, char* argv[]) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	vector<long long> dane;
	cin >> n;
	dane.resize(n);
	for(int i=0; i<n; i++) {
		cin >> dane[i];
	}
	test(dane);
}

