Squirrel Liss is interested in sequences. She also has preferences of integers. She thinks *n* integers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> are good.

Now she is interested in good sequences. A sequence *x*<sub class="lower-index">1</sub>, *x*<sub class="lower-index">2</sub>, ..., *x*<sub class="lower-index">*k*</sub> is called good if it satisfies the following three conditions:
 -  The sequence is strictly increasing, i.e. *x*<sub class="lower-index">*i*</sub> &lt; *x*<sub class="lower-index">*i* + 1</sub> for each *i* (1 ≤ *i* ≤ *k* - 1). -  No two adjacent elements are coprime, i.e. *gcd*(*x*<sub class="lower-index">*i*</sub>, *x*<sub class="lower-index">*i* + 1</sub>) &gt; 1 for each *i* (1 ≤ *i* ≤ *k* - 1) (where *gcd*(*p*, *q*) denotes the greatest common divisor of the integers *p* and *q*). -  All elements of the sequence are good integers. 
Find the length of the longest good sequence.
The input consists of two lines. The first line contains a single integer *n* (1 ≤ *n* ≤ 10<sup class="upper-index">5</sup>) — the number of good integers. The second line contains a single-space separated list of good integers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> in strictly increasing order (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">5</sup>; *a*<sub class="lower-index">*i*</sub> &lt; *a*<sub class="lower-index">*i* + 1</sub>).


from collections import defaultdict
import math
import sys 
from bisect import bisect_right
mod = pow(10,8)
def clc():
    
    n = int(input())
    from collections import defaultdict
    arr = list(map(int,input().split()))
    
    dp = [0]*(pow(10,5)+10)
    arr = sorted(arr)
    fin = 1
    for ele in arr:
        ans = 1
        curd = []
        j= 2
        while j*j<=ele:
            if ele%j == 0:
                curd.append(j)
                if j!=(ele//j):
                    curd.append(ele//j)
            j+=1
        if ele>1:
            curd.append(ele)
        
        for i in range(len(curd)):
            ans = max(ans,dp[curd[i]]+1)

        for i in range(len(curd)):
            dp[curd[i]] = ans
        fin= max(fin,ans)
    print(fin)
            
        


    return True
ans =clc()



   