#include #define REP(i,n) for(int i = 0; i < (int)(n); ++i) using namespace std; int dp[1000010] = {}; vector getDivisor(int n){ vector v; for(int i=1; i*i<=n; i++){ if(n%i==0){ v.push_back(i); if(i!=n/i){ v.push_back(n/i); } } } sort(v.begin(),v.end()); return v; } int main(){ int N; cin >> N; int temp = 0; vector a; REP(i,N){ cin >> temp; a.push_back(temp); } sort(a.begin(),a.end()); for(auto p: a){ temp = 1; for(auto q: getDivisor(p)){ if(p==q) continue; temp = max(temp,dp[q]+1); } dp[p] = temp; } int ans = 0; REP(i,1000010){ ans = max(ans, dp[i]); } cout << ans << endl; return 0; }