#include #include #include #include using namespace std; #define REP(i,s,e) for (i = s; i <= e; i++) #define rep(i,n) REP (i,0,(int)(n)-1) #define RREP(i,s,e) for (i = s; i >= e; i--) #define rrep(i,n) RREP (i,(int)(n)-1,0) const int INF = 1e8; const int MOD = 1e9+7; typedef long long ll; int X[100000]; vector get_divisor(int n) { int i; vector a, b; for (i = 1; i * i < n; i++) { if (n % i == 0) { a.push_back(i); b.push_back(n/i); } } if (i * i == n) a.push_back(i); reverse(b.begin(),b.end()); for (auto x : b) a.push_back(x); return a; } int main(void) { int i, N; scanf("%d",&N); rep (i,N) scanf("%d",&X[i]); sort(X,X+N); map mp; rep (i,N) { int ma = 0; vector d = get_divisor(X[i]); for (auto x : d) if (mp.count(x)) { ma = max(ma,mp[x]); } mp[X[i]] = ma + 1; } int ans = 0; for (auto p : mp) { ans = max(ans,p.second); } printf("%d\n",ans); return 0; }