A. Bear and Poker

time limit per test

memory limit per test

input

output

n players (including Limak himself) and right now all of them have bids on the table. i-th of them has bid with size ai

Each player can double his bid any number of times and triple his bid any number of times. The casino has a great jackpot for making all bids equal. Is it possible that Limak and his friends will win a jackpot?

Input

n (2 ≤ n ≤ 105), the number of players.

n integer numbers a1, a2, ..., an (1 ≤ ai ≤ 109) — the bids of players.

Output

Yes" (without the quotes) if players can make their bids become equal, or "No" otherwise.

Sample test(s)

input

4 75 150 75 50

output

Yes

input

3 100 150 250

output

No

Note

In the first sample test first and third players should double their bids twice, second player should double his bid once and fourth player should both double and triple his bid.

It can be shown that in the second sample test there is no way to make all bids equal.


   把每个数除以总gcd,观察它们有无非2,3的因子




#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<cctype>
#include<ctime>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define Fork(i,k,n) for(int i=k;i<=n;i++)
#define Rep(i,n) for(int i=0;i<n;i++)
#define ForD(i,n) for(int i=n;i;i--)
#define RepD(i,n) for(int i=n;i>=0;i--)
#define Forp(x) for(int p=pre[x];p;p=next[p])
#define Forpiter(x) for(int &p=iter[x];p;p=next[p])
#define Lson (x<<1)
#define Rson ((x<<1)+1)
#define MEM(a) memset(a,0,sizeof(a));
#define MEMI(a) memset(a,127,sizeof(a));
#define MEMi(a) memset(a,128,sizeof(a));
#define INF (2139062143)
#define F (100000007)
#define MAXN (100010)
typedef long long ll;
ll mul(ll a,ll b){return (a*b)%F;}
ll add(ll a,ll b){return (a+b)%F;}
ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;}
void upd(ll &a,ll b){a=(a%F+b%F)%F;}
int a[MAXN],n;
int gcd(int a,int b){if (b==0) return a;return gcd(b,a%b);}
int main()
{
// freopen("C.in","r",stdin);
// freopen(".out","w",stdout);

cin>>n;

For(i,n)
scanf("%d",&a[i]);
int p=a[1];
Fork(i,2,n) p=gcd(p,a[i]);

For(i,n) a[i]/=p;
For(i,n)
{
while(a[i]%2==0) a[i]/=2;
while(a[i]%3==0) a[i]/=3;
if (a[i]^1) {
puts("No");return 0;
}

}

puts("Yes");
return 0;
}