小苯的排列构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

格格有一个长度为 n 的排列 p,但她不记得 p 具体的样子,她只记得数组 a
其中:a_i = gcd(p_1, p_2,...,p_i),也就是说,a_i 表示排列 p 中前 i 个数字的最大公约数。

现在,她希望小苯将排列 p 复原出来,请你帮帮他吧。
(但有可能无解,这意味着格格给出的 a 数组可能是不正确的,此时输出 -1 即可。)

输入描述:

输入包含两行。
第一行一个正整数 n\ (1 \leq n \leq 2 \times 10^5),表示数组 a 的长度。
第二行 n 个正整数 a_i\ (1 \leq a_i \leq n),表示数组 a 的元素。

输出描述:

输出包含一行 n 个正整数,表示符合条件的排列 p
如果有多个解,输出任意方案即可。
如果无解,请输出一个数字:-1
示例1

输入

复制
4
4 2 1 1

输出

复制
4 2 1 3

说明

首先输出是一个排列,且满足格格的要求:
a_1 = gcd(p_1) = 4
a_2 = gcd(p_1, p_2) = 2
a_3 = gcd(p_1, p_2, p_3) = 1
a_4 = gcd(p_1, p_2, p_3, p_4) = 1

备注:

排列:长度为 n 的排列是一个数组,满足其中 1n 的每个正整数恰好出现一次。