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>).
# 2022-10-23 20:09:01.339074
# https://codeforces.com/problemset/problem/264/B
import sys
from collections import defaultdict

_DEBUG = False
_DEBUG = True
if not _DEBUG:
    input = sys.stdin.readline
    # print = sys.stdout.write


def proc(n, a):
    primes = set(range(2, 10 ** 5))
    for e in range(2, 317):
        if e not in primes:
            continue
        for j in range(e * 2, 10 ** 5, e):
            primes.discard(j)
    primes = sorted(primes)

    def factorize(x):
        res = []
        for p in primes:
            if p > x:
                break
            if x % p != 0:
                continue
            res.append(p)
            while x % p == 0:
                x //= p
        return res

    t = defaultdict(int)
    for e in a:
        factors = factorize(e)
        new_val = (max(t[f] for f in factors) if factors else 0) + 1

        for f in factors:
            t[f] = new_val

    return max(t.values())


n = int(input())
a = list(map(int, input().split()))

ans = proc(n, a)
print(ans)
