// 12.7'06
// Hendrik Jan Hoogeboom leert programmeren

// The Bavarian Beer Party, dynamisch
// de grooste moeilijkheid was om te zorgen dat de stappen even blijven

#include <iostream>
#include <string>  

using namespace std;

const int MAXguests = 1000;
// globaal (als 't maar werkt ..)
int  
  brand[MAXguests],
  toast[MAXguests][MAXguests];

int proost ( int totaal )
{ 
  int i,
    eerst, laatst,
    aantal,
    best,
    som;
 
  // initialisatie: paren
  for (i=0; i<totaal-1; i++)  
  { toast[i][i+1] = ( brand[i] == brand[i+1] ); }

  if (totaal == 2) { return toast[0][1] ; }  
    
  for (aantal=4; aantal<=totaal; aantal+=2) 
  { // dynamische loop: 'aantal' toastende professoren
    // aantal == laatst - eerst + 1
    for (eerst=0; eerst<=totaal-aantal ; eerst++) 
    {
      laatst = eerst + aantal -1;
      best = (brand[eerst] == brand[laatst]);
      best += toast[eerst+1][laatst-1];
      for (i=eerst+1; i<=laatst-2; i=i+2) 
      { // alleen even matches!
        som = toast[eerst][i] + toast [i+1][laatst];
        if (som > best)  best = som; 
      }
      toast[eerst][laatst] = best; 
    }
  }// loop
  return toast[0][totaal-1] ;
}// proost


int main ()
{ // standaard vars 
 int Ninst, inst;
  // probleem vars
 int aantal;

  {  cin >> Ninst;
     for (inst=1; inst<=Ninst; inst++)
     { 
       cin >> aantal;
       for (int i=0; i<aantal; i++)  cin >> brand[i]; 
       cout << proost(aantal) << endl ;
     } // inst
  } // file
} // main 
  
