Clique in the Divisibility Graph

As you must know, the maximum clique problem in an arbitrary graph is NP-hard. Nevertheless, for some graphs of specific kinds it can be solved effectively.

Just in case, let us remind you that a clique in a non-directed graph is a subset of the vertices of a graph, such that any two vertices of this subset are connected by an edge. In particular, an empty set of vertexes and a set consisting of a single vertex, are cliques.

Let’s define a divisibility graph for a set of positive integers A = {a 1, a 2, …, a n} as follows. The vertices of the given graph are numbers from set A, and two numbers a i and a j ( i ≠ j) are connected by an edge if and only if either a i is divisible by a j, or a j is divisible by a i.

You are given a set of non-negative integers A. Determine the size of a maximum clique in a divisibility graph for set A.

Input

The first line contains integer n (1 ≤ n ≤ 106), that sets the size of set A.

The second line contains n distinct positive integers a 1, a 2, …, a n (1 ≤ a i ≤ 106) — elements of subset A. The numbers in the line follow in the ascending order.

Output

Print a single number — the maximum size of a clique in a divisibility graph for set A.

Examples

input

8
3 4 6 8 10 18 21 24

output

3

Note

In the first sample test a clique of size 3 is, for example, a subset of vertexes {3, 6, 18}. A clique of a larger size doesn’t exist in this graph.

Solution:

#include <bits/stdc++.h>

using namespace std;

const int N = 1234567;

bool have[N];
int f[N];

int main() {
int n;
scanf("%d", &n);
for (int i = 1; i < N; i++) {
    have[i] = false;
    f[i] = 0;
  }
  for (int i = 0; i < n; i++) {
    int a;
    scanf("%d", &a);
    have[a] = true;
  }
  int ans = 0;
  for (int i = 1; i < N; i++) {
    if (have[i]) {
      f[i]++;
      ans = max(ans, f[i]);
      for (int j = i + i; j < N; j += i) {
        if (f[i] > f[j]) {
f[j] = f[i];
}
}
}
}
printf("%d\n", ans);
return 0;
}