博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Divide by three, multiply by two CodeForces - 977D (拓扑排序)
阅读量:4046 次
发布时间:2019-05-25

本文共 2215 字,大约阅读时间需要 7 分钟。

 

Polycarp likes to play with numbers. He takes some integer number x, writes it down on the board, and then performs with it n−1 operations of the two kinds:

  • divide the number x by 3 (x must be divisible by 3);
  • multiply the number x by 2.

After each operation, Polycarp writes down the result on the board and replaces x by the result. So there will be n numbers on the board after all.

You are given a sequence of length n — the numbers that Polycarp wrote down. This sequence is given in arbitrary order, i.e. the order of the sequence can mismatch the order of the numbers written on the board.

Your problem is to rearrange (reorder) elements of this sequence in such a way that it can match possible Polycarp's game in the order of the numbers written on the board. I.e. each next number will be exactly two times of the previous number or exactly one third of previous number.

It is guaranteed that the answer exists.

Input

The first line of the input contatins an integer number n (2≤n≤100) — the number of the elements in the sequence. The second line of the input contains n integer numbers a1,a2,…,an (1≤ai≤3⋅10^18) — rearranged (reordered) sequence that Polycarp can wrote down on the board.

Output

Print n integer numbers — rearranged (reordered) input sequence that can be the sequence that Polycarp could write down on the board.

It is guaranteed that the answer exists.

Examples

Input

64 8 6 3 12 9

Output

9 3 6 12 4 8

Input

442 28 84 126

Output

126 42 84 28

Input

21000000000000000000 3000000000000000000

Output

3000000000000000000 1000000000000000000

Note

In the first example the given sequence can be rearranged in the following way: [9,3,6,12,4,8]. It can match possible Polycarp's game which started with x=9.

题意:

给出一个整数n,然后给乱序的n个数,这个n个数是由一个数通过/3或者*2得到的另外n-1个数,要求我们将正确的顺序输出。

通过题目我们可以知道,要从数a得到b数b,一定是通过a/3=b 或者 a*2=b ,所以我们可以找到n个数中的关系,然后使用拓扑排序得到原来的顺序。 

代码:

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn=117;int n;vector
path[maxn]; //存储数之间的关系ll num[maxn];int rudu[maxn]; ll res[maxn]; //存放结果int cnt=0; int main(){ memset(rudu,0,sizeof(rudu)); scanf("%d",&n); for(int i=0;i

 

转载地址:http://eizci.baihongyu.com/

你可能感兴趣的文章
MongoDB 数据文件备份与恢复
查看>>
数据库索引介绍及使用
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>