#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define MOD 1000000007
#define FOR(i,a,b) for (int i = (a);i <= (b);i++)
#define FOD(i,a,b) for (int i = (b);i >= (a);i--)
#define ALL(x) (x).begin(),(x).end()
#define ii pair<int,int>
#define iii pair<int,pair<int,int>>
//const int MOD = 998244353;
const int MAXN = 1e6+7;
int a[MAXN],dp[MAXN],bit[MAXN];
void update(int x,int val){
for (;x<=MAXN;x+=x&-x)bit[x] = max(bit[x],val);
}
int get(int x){
int ans = 0;
for (;x;x-=x&-x)ans = max(ans,bit[x]);
return ans;
}
bool prime(int x){
if (x == 2 || x == 3)return true;
if (x < 2 || x % 2 == 0 || x % 3 == 0)return false;
for (int i = 5;i <= (int)sqrt(x);i+=6)
if (x % i == 0 || x % (i + 2) == 0)return false;
return true;
}
int F(int x){
int ans = 1;
for (int i = 2;i*i*i <= x;i++)
if (x % i == 0){
int cnt = 1;
while(x % i == 0){
cnt++;
x = x / i;
}
ans = ans * cnt;
}
if (x <= 1)return ans;
int X = sqrt(x);
if (prime(x))ans = ans * 2;
else if (X*X == x && prime(X))ans = ans * 3;
else ans = ans * 4;
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n;cin >> n;
FOR(i,1,n)cin >> a[i];
FOR(i,1,n)a[i] = F(a[i]);
FOR(i,1,n){
dp[i] = get(a[i])+1;
update(a[i]+1,dp[i]);
dp[i] = max(dp[i],dp[i-1]);
}
cout << dp[n];
return (0^0);
}
/* /\_/\
( -.-)
/ > \>
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIEZPUihpLGEsYikgZm9yIChpbnQgaSA9IChhKTtpIDw9IChiKTtpKyspCiNkZWZpbmUgRk9EKGksYSxiKSBmb3IgKGludCBpID0gKGIpO2kgPj0gKGEpO2ktLSkKI2RlZmluZSBBTEwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGlpaSBwYWlyPGludCxwYWlyPGludCxpbnQ+PgovL2NvbnN0IGludCBNT0QgPSA5OTgyNDQzNTM7CmNvbnN0IGludCBNQVhOID0gMWU2Kzc7CmludCBhW01BWE5dLGRwW01BWE5dLGJpdFtNQVhOXTsKdm9pZCB1cGRhdGUoaW50IHgsaW50IHZhbCl7CiAgICBmb3IgKDt4PD1NQVhOO3grPXgmLXgpYml0W3hdID0gbWF4KGJpdFt4XSx2YWwpOwp9CmludCBnZXQoaW50IHgpewogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKDt4O3gtPXgmLXgpYW5zID0gbWF4KGFucyxiaXRbeF0pOwogICAgcmV0dXJuIGFuczsKfQpib29sIHByaW1lKGludCB4KXsKICAgIGlmICh4ID09IDIgfHwgeCA9PSAzKXJldHVybiB0cnVlOwogICAgaWYgKHggPCAyIHx8IHggJSAyID09IDAgfHwgeCAlIDMgPT0gMClyZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gNTtpIDw9IChpbnQpc3FydCh4KTtpKz02KQogICAgaWYgKHggJSBpID09IDAgfHwgeCAlIChpICsgMikgPT0gMClyZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKfQppbnQgRihpbnQgeCl7CiAgICBpbnQgYW5zID0gMTsKICAgIGZvciAoaW50IGkgPSAyO2kqaSppIDw9IHg7aSsrKQogICAgaWYgKHggJSBpID09IDApewogICAgICAgIGludCBjbnQgPSAxOwogICAgICAgIHdoaWxlKHggJSBpID09IDApewogICAgICAgICAgICBjbnQrKzsKICAgICAgICAgICAgeCA9IHggLyBpOwogICAgICAgIH0KICAgICAgICBhbnMgPSBhbnMgKiBjbnQ7CiAgICB9CiAgICBpZiAoeCA8PSAxKXJldHVybiBhbnM7CiAgICBpbnQgWCA9IHNxcnQoeCk7CiAgICBpZiAocHJpbWUoeCkpYW5zID0gYW5zICogMjsKICAgIGVsc2UgaWYgKFgqWCA9PSB4ICYmIHByaW1lKFgpKWFucyA9IGFucyAqIDM7CiAgICBlbHNlIGFucyA9IGFucyAqIDQ7CiAgICByZXR1cm4gYW5zOwp9CmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaW50IG47Y2luID4+IG47CiAgICBGT1IoaSwxLG4pY2luID4+IGFbaV07CiAgICBGT1IoaSwxLG4pYVtpXSA9IEYoYVtpXSk7CiAgICBGT1IoaSwxLG4pewogICAgICAgIGRwW2ldID0gZ2V0KGFbaV0pKzE7CiAgICAgICAgdXBkYXRlKGFbaV0rMSxkcFtpXSk7CiAgICAgICAgZHBbaV0gPSBtYXgoZHBbaV0sZHBbaS0xXSk7CiAgICB9CiAgICBjb3V0IDw8IGRwW25dOwogICAgcmV0dXJuICgwXjApOwp9Ci8qICAgL1xfL1wKICAgICggIC0uLSkKICAgIC8gPiAgXD4KKi8=