You are given an integer n. In one move, you can either multiply n by two or divide n by 6 (if it is divisible by 6 without the remainder).
Your task is to find the minimum number of moves needed to obtain 1 from n or determine if it’s impossible to do that.
You have to answer t independent test cases.
Input
The first line of the input contains one integer t (1≤t≤2⋅10^4) — the number of test cases. Then t test cases follow.
The only line of the test case contains one integer n (1≤n≤10^9).
Output
For each test case, print the answer — the minimum number of moves needed to obtain 1 from n if it’s possible to do that or -1 if it’s impossible to obtain 1 from n.
Example
input
7
1
2
3
12
12345
15116544
387420489
output
0
-1
2
-1
-1
12
36
My Answer Code:
/*
Author:Albert Tesla Wizard
Time:2021/2/27 13:06
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)
{
int n,cnt1=0,cnt2=0;
cin>>n;
bool ans;
if(n==1)ans=true;
else if(n%3!=0)ans=false;
else
{
while(n%3==0){n/=3;cnt1++;}
while(n%2==0){n/=2;cnt2++;}
if(n!=1||cnt2>cnt1)ans=false;
else ans=true;
}
if(ans)cout<<2*cnt1-cnt2<<'\n';
else cout<<-1<<'\n';
}
return 0;
}