British mathematician John Littlewood once said about Indian mathematician Srinivasa Ramanujan that "every positive integer was one of his personal friends."

It turns out that positive integers can also be friends with each other! You are given an array $a$ of distinct positive integers.

Define a subarray $a_i, a_{i+1}, \ldots, a_j$ to be a friend group if and only if there exists an integer $m \ge 2$ such that $a_i mod m = a_{i+1} mod m = \ldots = a_j mod m$, where $x mod y$ denotes the remainder when $x$ is divided by $y$.

Your friend Gregor wants to know the size of the largest friend group in $a$.


-----Input-----

Each test contains multiple test cases. The first line contains the number of test cases $t$ ($1 \le t \le 2\cdot 10^4$).

Each test case begins with a line containing the integer $n$ ($1 \le n \le 2 \cdot 10^5$), the size of the array $a$.

The next line contains $n$ positive integers $a_1, a_2, \ldots, a_n$ ($1 \le a_i \le {10}^{18}$), representing the contents of the array $a$. It is guaranteed that all the numbers in $a$ are distinct.

It is guaranteed that the sum of $n$ over all test cases is less than $2\cdot 10^5$.


-----Output-----

Your output should consist of $t$ lines. Each line should consist of a single integer, the size of the largest friend group in $a$.


-----Examples-----

Input
4
5
1 5 2 4 6
4
8 2 5 10
2
1000 2000
8
465 55 3 54 234 12 45 78
Output
3
3
2
6


-----Note-----

In the first test case, the array is $[1,5,2,4,6]$. The largest friend group is $[2,4,6]$, since all those numbers are congruent to $0$ modulo $2$, so $m=2$.

In the second test case, the array is $[8,2,5,10]$. The largest friend group is $[8,2,5]$, since all those numbers are congruent to $2$ modulo $3$, so $m=3$.

In the third case, the largest friend group is $[1000,2000]$. There are clearly many possible values of $m$ that work.

Source: codeforces | Difficulty: MEDIUM_HARD
Tags: Sorting

Amortized analysis

Number theory

Divide and conquer

Mathematics

Data structures


Solutions:
import sys
from math import gcd
input = sys.stdin.readline
t = int(input())
while t > 0:
	n = int(input())
	arr = [*map(int, input().split())]
	a = [0] + arr
	g = 0
	p = 0
	c = 1
	for i in range(2, n + 1):
		g = gcd(g, abs(a[i] - a[i - 1]))
		if g > 1:
			c = max(c, i - p)
		else:
			g = 0
			p = i
			while g != 1:
				sg = g
				g = gcd(g, abs(a[p] - a[p - 1]))
				p -= 1
			g = sg
	print(c)
	t -= 1


import math
for t in range(int(input())):
	n = int(input())
	a = list(map(int, input().strip().split()))
	if n == 1:
		print(n)
	else:
		ans = 0
		for i in range(len(a) - 1):
			a[i] = abs(a[i] - a[i + 1])
		a.pop()
		(g, st, cur) = (0, 0, 0)
		for i in range(len(a)):
			g = math.gcd(g, a[i])
			cur += 1
			if g != 1:
				ans = max(ans, cur)
			else:
				(g, cur) = (0, 0)
				for j in range(i - st + 1):
					ind = i - j
					g = math.gcd(g, a[ind])
					if g != 1:
						cur += 1
						ans = max(ans, cur)
					else:
						st = ind + 1
						break
		print(ans + 1)


import math
for _ in range(int(input())):
	n = int(input())
	a = [int(x) for x in input().split()]
	b = [1] + [abs(a[i] - a[i - 1]) for i in range(1, n)]
	cur = {1: 0}
	ans = 0
	for i in range(1, n):
		g = b[i]
		d = {}
		d[g] = i
		if g != 1:
			tmp = sorted(list(cur.keys()), reverse=True)
			for j in tmp:
				g = math.gcd(g, j)
				if g not in d:
					d[g] = cur[j]
				if g == 1:
					ans = max(ans, i - cur[j])
					break
		cur = d.copy()
	print(ans + 1)