Gena loves sequences of numbers. Recently, he has discovered a new type of sequences which he called an almost arithmetical progression. A sequence is an almost arithmetical progression, if its elements can be represented as:

  * a1 = p, where p is some integer; 
  * ai = ai - 1 + ( - 1)i + 1·q (i > 1), where q is some integer. 



Right now Gena has a piece of paper with sequence b, consisting of n integers. Help Gena, find there the longest subsequence of integers that is an almost arithmetical progression.

Sequence s1, s2, ..., sk is a subsequence of sequence b1, b2, ..., bn, if there is such increasing sequence of indexes i1, i2, ..., ik (1 ≤ i1 < i2 < ... < ik ≤ n), that bij = sj. In other words, sequence s can be obtained from b by crossing out some elements.

Input

The first line contains integer n (1 ≤ n ≤ 4000). The next line contains n integers b1, b2, ..., bn (1 ≤ bi ≤ 106).

Output

Print a single integer — the length of the required longest subsequence.

Examples

Input

2
3 5


Output

2


Input

4
10 20 10 30


Output

3

Note

In the first test the sequence actually is the suitable subsequence. 

In the second test the following subsequence fits: 10, 20, 10.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.HashSet;

public class C {
    static int n;
    static int[] nums;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        nums = new int[n];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++)
            nums[i] = Integer.parseInt(st.nextToken());

        int[] next = new int[n];

        Loop: for (int i = 0; i < n; i++){
            for (int j = i + 1; j < n; j++)
                if (nums[i] == nums[j]) {
                    next[i] = j;
                    continue Loop;
                }
                next[i] = -1;
        }
        if (n <= 2) {
            System.out.println(n);
            System.exit(0);
        }

        HashSet<Integer> set1 = new HashSet<Integer>();
        int max = 0;
        for (int i = 0; i < n; i++) {
            if (!set1.contains(nums[i])) {
                set1.add(nums[i]);

                HashSet<Integer> set2 = new HashSet<Integer>();
                for (int j = i + 1; j < n; j++)
                    if (!set2.contains(nums[j])) {
                        set2.add(nums[j]);
                        int cnt = 2, idx1 = i, idx2 = j;

                        while (true) {
                            while (idx1 != -1 && idx1 <= idx2)
                                idx1 = next[idx1];

                            if (idx1 != -1)
                                cnt++;
                            else
                                break;

                            while (idx2 != -1 && idx2 <= idx1)
                                idx2 = next[idx2];

                            if (idx2 != -1)
                                cnt++;
                            else
                                break;
                        }

                        max = Math.max(cnt, max);
                    }
            }
        }

        System.out.println(max);
    }
}