CodeForces - 977D
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define maxn 205
long long a[maxn],n,b[maxn];
stack<long long>stk;
map<long long,bool>mmp;
map<long long,bool>vis;
bool flag=0;
void dfs(long long x,int cnt)
{
b[cnt]=x;
if(cnt==n-1)
{
flag=1;
for(int j=0; j<=cnt; j++)
if(j==0)
cout<<b[j];
else
cout<<" "<<b[j];
cout<<endl;
}
if(mmp[x*2]&&!vis[x*2])
{
vis[x*2]=1;
dfs(x*2,cnt+1);
vis[x*2]=0;
}
if(x%3==0&&mmp[x/3]&&!vis[x/3])
{
vis[x/3]=1;
dfs(x/3,cnt+1);
vis[x/3]=0;
}
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
mmp[a[i]]=1;
stk.push(a[i]);
}
while(!stk.empty())
{
vis.clear();
dfs(stk.top(),0);
vis[stk.top()]=1;
stk.pop();
if(flag)
break;
}
return 0;
}