Problem:
Score : 1100 points

Problem Statement

Snuke got positive integers s_1,...,s_N from his mother, as a birthday present. There may be duplicate elements.

He will circle some of these N integers. Since he dislikes cubic numbers, he wants to ensure that if both s_i and s_j (i ≠ j) are circled, the product s_is_j is not cubic. For example, when s_1=1,s_2=1,s_3=2,s_4=4, it is not possible to circle both s_1 and s_2 at the same time. It is not possible to circle both s_3 and s_4 at the same time, either.

Find the maximum number of integers that Snuke can circle.

Constraints

1 ≦ N ≦ 10^5

1 ≦ s_i ≦ 10^{10}

All input values are integers.

Input

The input is given from Standard Input in the following format:

N
s_1
:
s_N

Output

Print the maximum number of integers that Snuke can circle.

Sample Input 1

8
1
2
3
4
5
6
7
8

Sample Output 1

6

Snuke can circle 1,2,3,5,6,7.

Sample Input 2

6
2
4
8
16
32
64

Sample Output 2

3

Sample Input 3

10
1
10
100
1000000007
10000000000
1000000009
999999999
999
999
999

Sample Output 3

9

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef unsigned long long ll;
map<ll,ll> mp,mp1;
ll a[100010];
vector<ll> v;
void fac(ll x){
	mp1.clear();
	for(ll i=2;i*i<=x;i++){
		while(x%i==0){
			x /= i;
			mp1[i]++;
		}
	}
	if(x!=1) mp1[x]++;
}

ll solve(ll x){
	for(int j=0;j<v.size();j++){
		while(x%v[j]==0){
			x /= v[j];
			if(x==1){
				return 1;
			}
		}
	}
	return x;
}

int main(){
	ll i,n;
	ll ans = 0;
	cin >> n;
	for(i=2;i<=2154;i++){
		v.push_back(i*i*i);
	}
	for(i=0;i<n;i++){
		cin >> a[i];
		ll b = solve(a[i]);
		mp[b]++;
	}
	for(auto x:mp){
		ll y = x.first;
		if(y==1) continue;
		if(y>=1000000000){
			ans += 2*x.second;
			continue;
		}
		ll z = solve(y*y);
		if(mp.find(z)==mp.end()){
			ans += 2*x.second;
		}else{
			ans += max(x.second,mp[z]);
		}
	}
	ans /= 2;
	if(mp[1]) ans++;
	cout << ans << endl;
}