D - Divide by three, multiply by two 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; }