#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,a[5000],n;
cin >> t;
while(t--)
{
cin >> n;
//int a[n];
unordered_map<int, int> mp;
for(int i=0;i<n;i++)
{
cin >> a[i];
mp[a[i]] = i; // dodajemy element a[i] do hashmapy z indeksem i
}
if(n <= 2) // jeśli ciąg ma mniej niż 3 elementy, to jest to ciąg arytmetyczny o długości 1 lub 2
{
cout << n << endl;
}
else
{
int ans = 1; // długość najdłuższego ciągu arytmetycznego
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++) // szukamy ciągu arytmetycznego kończącego się na j i zaczynającego się na i
{
int d = a[j] - a[i]; // różnica między a[j] i a[i]
int cnt = 2; // długość ciągu arytmetycznego
int next = a[j] + d; // następny element ciągu
while(mp.find(next) != mp.end() && mp[next] > j) // szukamy kolejnych elementów ciągu arytmetycznego
{
cnt++; // zwiększamy długość ciągu o 1
j = mp[next]; // uaktualniamy j na indeks kolejnego elementu ciągu
next += d; // u
}
ans = max(ans, cnt); // aktualizujemy długość najdłuższego ciągu arytmetycznego
}
}
cout << ans << endl; // wypisujemy wynik dla danego zestawu danych
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewogICAgaW50IHQsYVs1MDAwXSxuOwogICAgCiAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICAvL2ludCBhW25dOwogICAgICAgIHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IG1wOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICAgICAgbXBbYVtpXV0gPSBpOyAvLyBkb2RhamVteSBlbGVtZW50IGFbaV0gZG8gaGFzaG1hcHkgeiBpbmRla3NlbSBpCiAgICAgICAgfQogICAgICAgIGlmKG4gPD0gMikgLy8gamXFm2xpIGNpxIVnIG1hIG1uaWVqIG5pxbwgMyBlbGVtZW50eSwgdG8gamVzdCB0byBjacSFZyBhcnl0bWV0eWN6bnkgbyBkxYJ1Z2/Fm2NpIDEgbHViIDIKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgbiA8PCBlbmRsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgIGludCBhbnMgPSAxOyAvLyBkxYJ1Z2/Fm8SHIG5hamTFgnXFvHN6ZWdvIGNpxIVndSBhcnl0bWV0eWN6bmVnbwogICAgICAgIGZvcihpbnQgaT0wO2k8bi0xO2krKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaj1pKzE7ajxuO2orKykgLy8gc3p1a2FteSBjacSFZ3UgYXJ5dG1ldHljem5lZ28ga2/FhGN6xIVjZWdvIHNpxJkgbmEgaiBpIHphY3p5bmFqxIVjZWdvIHNpxJkgbmEgaQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgZCA9IGFbal0gLSBhW2ldOyAvLyByw7PFvG5pY2EgbWnEmWR6eSBhW2pdIGkgYVtpXQogICAgICAgICAgICAgICAgaW50IGNudCA9IDI7IC8vIGTFgnVnb8WbxIcgY2nEhWd1IGFyeXRtZXR5Y3puZWdvCiAgICAgICAgICAgICAgICBpbnQgbmV4dCA9IGFbal0gKyBkOyAvLyBuYXN0xJlwbnkgZWxlbWVudCBjacSFZ3UKICAgICAgICAgICAgICAgIHdoaWxlKG1wLmZpbmQobmV4dCkgIT0gbXAuZW5kKCkgJiYgbXBbbmV4dF0gPiBqKSAvLyBzenVrYW15IGtvbGVqbnljaCBlbGVtZW50w7N3IGNpxIVndSBhcnl0bWV0eWN6bmVnbwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNudCsrOyAvLyB6d2nEmWtzemFteSBkxYJ1Z2/Fm8SHIGNpxIVndSBvIDEKICAgICAgICAgICAgICAgICAgICBqID0gbXBbbmV4dF07IC8vIHVha3R1YWxuaWFteSBqIG5hIGluZGVrcyBrb2xlam5lZ28gZWxlbWVudHUgY2nEhWd1CiAgICAgICAgICAgICAgICAgICAgbmV4dCArPSBkOyAvLyB1CiAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAgYW5zID0gbWF4KGFucywgY250KTsgLy8gYWt0dWFsaXp1amVteSBkxYJ1Z2/Fm8SHIG5hamTFgnXFvHN6ZWdvIGNpxIVndSBhcnl0bWV0eWN6bmVnbwogICAgICAgIAl9CiAgICAJfQogICAgY291dCA8PCBhbnMgPDwgZW5kbDsgLy8gd3lwaXN1amVteSB3eW5payBkbGEgZGFuZWdvIHplc3Rhd3UgZGFueWNoCiAgICAgICAgfQp9CnJldHVybiAwOwp9CQ==