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.util.*;
import java.io.*;
 
public class File {
	public static class FastScanner {
		BufferedReader br;
		StringTokenizer st;
		
		public FastScanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}
		
		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				}
				catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			return st.nextToken();
		}
		
		int nextInt() {
			return Integer.parseInt(next());
		}
		
		long nextLong() {
			return Long.parseLong(next());
		}
		
		double nextDouble() {
			return Double.parseDouble(next());
		}
	}
	
	public static void main(String[] args) {
		FastScanner sc = new FastScanner();
		PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
		
		
		
		int n = sc.nextInt();
		int[] b = new int[n];
		Map<Integer, Integer> lastIndex = new HashMap<>();
		
		for (int i = 0; i < n; i++) {
			b[i] = sc.nextInt();
			lastIndex.put(b[i], i);
		}
				
		
		
		
		int longest = Math.min(n, 2);
		
		Set<Integer> aSet = new HashSet<>();
		
		for (int i = 0; i < n; i++) {
			if (aSet.contains(b[i])) continue;
			aSet.add(b[i]);
			
			int A = b[i];
			Set<Integer> bSet = new HashSet<>();
			
			for (int j = i + 1; j < n; j++) {
				if (bSet.contains(b[j])) {
					continue;
				}
				bSet.add(b[j]);
				
				int B = b[j];
				int currLength = 2;
				
				int k = j + 1;
				
				int bound = Math.max(lastIndex.get(A), lastIndex.get(B));
				
				while (k <= bound) {
					if ((b[k] == A) && (currLength % 2 == 0)) {
						currLength++;
					}
					else if ((b[k] == B) && (currLength % 2 == 1)) {
						currLength++;
					}
					
					k++;
				}
				
				longest = Math.max(longest, currLength);
			}
		}
		
		
		
		
		
		
		
		
		out.println(longest);
		
		
		
		
		out.close();
	}
}