#pragma GCC target("avx") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include using namespace std; void solve() { } int main() { cin.tie(0); ios::sync_with_stdio(false); int N; cin >> N; constexpr int K = 100005; vector dp(N, 1), lst(K, -1); for( int i = 0; i < N; i++ ) { int A; cin >> A; vector d; for( int p = 1; p*p <= A; p++ ) { if( A%p == 0 ) { d.emplace_back(p); d.emplace_back(A/p); } } for( int& d_ : d ) { if( lst[d_] != -1 ) { dp[i] = max(dp[i], dp[lst[d_]]+1); } } lst[A] = i; } cout << *max_element(dp.begin(), dp.end()) << endl; }