#include <bits/stdc++.h>   #pragma GCC target( avx )   #pragma GCC optimize( O3 )   #pragma GCC optimize( unroll-loops )   #pragma GCC target( sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native )   using std::cin;   using std::cout;   using std::lower_bound;   using std::string;   using std::upper_bound;   using std::vector;   using vi = vector<long long>;   using vii = vector<vi>;   using pii = std::pair<long long, long long>;   constexpr long long MOD = 998244353;   constexpr long long MAX = 1e7;   constexpr long long INF = (1ll << 62);   template <class T>   class prique : public std::priority_queue<T, std::vector<T>, std::greater<T>> {   };   template <typename T>   struct Segment_tree {     long long N;     T mem;     vector<T> node;     Segment_tree(vector<T> &X, T m) : mem(m) {       long long sz = X.size();       N = 1;       while (N < sz) N *= 2;       node.resize(2 * N - 1, mem);       for (int i = (int)(0); i < (int)(sz); i++) node[N - 1 + i] = X[i];       for (int i = (int)(N - 2); (int)(0) <= i; i--) {         node[i] = Compare(node[i * 2 + 1], node[i * 2 + 2]);       }     }     T Compare(T &A, T &B) { return std::max(A, B); }     void update(long long X, T val) {       X += N - 1;       node[X] = val;       while (X > 0) {         X = (X - 1) / 2;         node[X] = Compare(node[X * 2 + 1], node[X * 2 + 2]);       }     }     T Query(long long a, long long b, long long now, long long l, long long r) {       if (r < 0) r = N;       if (r <= a || b <= l) return mem;       if (a <= l && r <= b) return node[now];       auto vl = Query(a, b, now * 2 + 1, l, (l + r) / 2),            vr = Query(a, b, now * 2 + 2, (l + r) / 2, r);       return Compare(vl, vr);     }   };   struct Binary_indexed_tree {     int N;     vi bit;     Binary_indexed_tree(int n) : N(n) { bit.resize(N + 1, 0); }     void add(int x, int a) {       for (x; x <= N; x += (x & -x)) bit[x] += a;     }     long long sum(int x) {       long long ret = 0;       for (x; x > 0; x -= (x & -x)) ret += bit[x];       return ret;     }     long long lower_bound(long long X) {       if (sum(N) < X) return -1;       long long ret = 0, memo = 1, sum = 0;       while (memo * 2 <= N) memo *= 2;       while (memo > 0) {         if (memo + ret <= N && sum + bit[memo + ret] < X) {           sum += bit[memo + ret];           ret += memo;         }         memo /= 2;       }       return ret + 1;     }   };   struct Union_Find {     long long N;     vi par;     vi siz;     Union_Find(int n) : N(n) {       par.resize(N);       siz.resize(N, 1);       for (int i = (int)(0); i < (int)(N); i++) par[i] = i;     }     long long root(long long X) {       if (par[X] == X) return X;       return par[X] = root(par[X]);     }     bool same(long long X, long long Y) { return root(X) == root(Y); }     void unite(long long X, long long Y) {       X = root(X);       Y = root(Y);       if (X == Y) return;       par[X] = Y;       siz[Y] += siz[X];       siz[X] = 0;     }     long long size(long long X) { return siz[root(X)]; }   };   long long modpow(long long a, long long n, long long mod) {     long long res = 1;     while (n > 0) {       if (n & 1) res = res * a % mod;       a = a * a % mod;       n >>= 1;     }     return res;   }   vi fac, finv, inv;   void COMinit() {     fac.resize(MAX);     finv.resize(MAX);     inv.resize(MAX);     fac[0] = fac[1] = 1;     finv[0] = finv[1] = 1;     inv[1] = 1;     for (int i = 2; i < MAX; i++) {       fac[i] = fac[i - 1] * i % MOD;       inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;       finv[i] = finv[i - 1] * inv[i] % MOD;     }   }   long long COM(long long n, long long r) {     if (n < r || n < 0 || r < 0) return 0;     return fac[n] * finv[r] % MOD * finv[n - r] % MOD;   }   long long modinv(long long a, long long m) {     long long b = m, u = 1, v = 0;     while (b) {       long long t = a / b;       a -= t * b;       std::swap(a, b);       u -= t * v;       std::swap(u, v);     }     u %= m;     if (u < 0) u += m;     return u;   }   int main() {     std::ios::sync_with_stdio(false);     std::cin.tie(nullptr);     long long T;     cin >> T;     while (T--) {       long long N;       cin >> N;       vi A(N);       for (int i = (int)(0); i < (int)(N); i++) cin >> A[i];       vii sum(N + 1, vi(27));       for (int i = (int)(0); i < (int)(N); i++) {         for (int j = (int)(0); j < (int)(27); j++) sum[i + 1][j] = sum[i][j];         sum[i + 1][A[i]]++;       }       long long ans = 0;       for (int i = (int)(1); i <= (int)(N); i++) {         for (int j = (int)(0); j < (int)(i); j++) {           long long memo = 0;           for (int k = (int)(0); k < (int)(27); k++)             memo = std::max(memo, sum[i][k] - sum[j][k]);           for (int k = (int)(0); k < (int)(27); k++) {             ans = std::max(ans,                            std::min(sum[j][k], sum[N][k] - sum[i][k]) * 2 + memo);           }         }       }       cout << ans <<   n ;     }   }