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 <bits/stdc++.h>
using namespace std;
const double EPS = 1E-9;
const long long INF = 1000LL * 1000 * 1000 * 1000 * 1000 * 1000;
#define pb push_back
#define ll long long
int n;
vector<int> primes;
bitset<100005> bs;
vector<pair<int , int> > factor;
map<pair<ll , int> , int> g;
int a[100000];
ll s[100000];
int main()
{
	scanf("%d" , &n);
	bs = ~bs;
	bs[1] = 0;
	for(int i = 2; i <= 100000; i++)
	{
		if(bs[i])
		{
			primes.pb(i);
			for(ll j = (ll)i * i; j <= 100000; j += i)
			{
				bs[j] = 0;
			}
		}
	}
	int m = primes.size();
	int ans = 0;
	for(int i = 0; i < n; i++)
	{
		scanf("%lld" , &s[i]);
		for(int j = 0; j < primes.size() && (ll)primes[j] * primes[j] <= s[i]; j++)
		{
			while(not(s[i] % primes[j]))
				s[i] /= primes[j];
		}
		if(s[i] > 100000)
		{
			ans++;
		}
	}
	printf("%d" , ans);
}