#include using namespace std; #define MAX 110000 int t, n, tree[MAX * 4]; pair p[MAX]; void update(int v, int l, int r, int idx, int val) { if(l > idx || r < idx)return ; if(l == r && r == idx) { tree[v] = val; return ; } int mid = (l + r) / 2; update(v * 2, l, mid, idx, val); update(v * 2 + 1, mid + 1, r, idx, val); tree[v] = max(tree[v * 2], tree[v * 2 + 1]); return ; } int query(int v, int l, int r, int idx) { if(l > idx)return 0; if(r <= idx)return tree[v]; int mid = (l + r) / 2; return max(query(v * 2, l, mid, idx), query(v * 2 + 1, mid + 1, r, idx)); } void solve() { int ans = 0, tmp = 0; scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", &p[i].first); p[i].second = n - i; } for(int i = 0; i <= 4 * n; i++)tree[i] = 0; sort(p + 1, p + n + 1); for(int i = 1; i <= n; i++)p[i].second = n - p[i].second; for(int i = 1; i <= n; i++) { if(p[i].first == p[i + 1].first) { tmp = query(1, 1, n, p[i + 1].second); update(1, 1, n, p[i].second, max(tmp + 1, 1)); ans = max(max(tmp + 1, 1), ans); } //cout << p[i].first << " " << p[i + 1].second << " " << ans << " " << query(1, 1, n, p[i + 1].second)<< endl; } cout << 2 * ans << endl; return ; } int main() { freopen("stairway.in", "r", stdin); freopen("stairway.out", "w", stdout); cin >> t; for(int i = 1; i <= t; i++)solve(); return 0; } /* 1 6 1 2 1 2 3 3 1 10 1 1 2 2 3 3 4 4 5 5 */