output_description: Print the maximum number of points you can gain.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      A_1 A_2 \cdots A_{3N}
attempt: from functools import lru_cache
  
  (N,) = [int(x) for x in input().split()]
  A = [int(x) for x in input().split()]
  
  # O(N^3), should TLE
  
  
  @lru_cache(maxsize=None)
  def dp(a, b, i):
      # Best you can do with [a] + [b] + A[i:]
      # Where len(A[i:]) is 3 * K - 5
      assert (3 * N - i) % 3 == 1
      assert a <= b
      if i == 3 * N - 1:
          return int(a == b == A[-1])
      best = 0
      temp = [a] + [b] + A[i : i + 3]
      assert len(temp) == 5
      for x in temp:
          if temp.count(x) >= 3:
              # If found any triple, alway take the points
              for j in range(3):
                  temp.remove(x)
              assert len(temp) == 2
              if temp[0] > temp[1]:
                  temp[1], temp[0] = temp[0], temp[1]
              best = 1 + dp(temp[0], temp[1], i + 3)
              break
      else:
          # keep any two
          temp.sort()
          for j in range(5):
              for k in range(j + 1, 5):
                  best = max(best, dp(temp[j], temp[k], i + 3))
      return best
  
  
  for i in reversed(range(2, 3 * N, 3)):
      for a in range(1, N + 1):
          for b in range(a, N + 1):
              dp(a, b, i)
  
  print(dp(A[0], A[1], 2))
  
problem_description: Statement
  
  We have 3N cards arranged in a row from left to right, where each card has an
  integer between 1 and N (inclusive) written on it. The integer written on the
  i-th card from the left is A_i.
  
  You will do the following operation N-1 times:
  
    * Rearrange the five leftmost cards in any order you like, then remove the three leftmost cards. If the integers written on those three cards are all equal, you gain 1 point.
  
  After these N-1 operations, if the integers written on the remaining three
  cards are all equal, you will gain 1 additional point.
  
  Find the maximum number of points you can gain.
samples: [{"input": "2\n    1 2 1 2 2 1", "output": "2\n    \n\nLet us rearrange the five leftmost cards so that the integers written on the\nsix cards will be 2\\ 2\\ 2\\ 1\\ 1\\ 1 from left to right.\n\nThen, remove the three leftmost cards, all of which have the same integer 2,\ngaining 1 point.\n\nNow, the integers written on the remaining cards are 1\\ 1\\ 1.\n\nSince these three cards have the same integer 1, we gain 1 more point.\n\nIn this way, we can gain 2 points - which is the maximum possible.\n\n* * *"}, {"input": "3\n    1 1 2 2 3 3 3 2 1", "output": "1\n    \n\n* * *"}, {"input": "3\n    1 1 2 2 2 3 3 3 1", "output": "3"}]