#include "testlib.h"
#include "cassert"

using namespace std;

const int MINn = 1, MAXn = 7;
const int MINk = 1, MAXk = 3;
const int MINm = 2, MAXm = 25;
const int MINc = 1, MAXc = MAXm;
const int MINlen = 4, MAXlen = MAXm * MAXm;

int k;
int snakes[MAXk][MAXlen][2];
int len[MAXk];

void test_coordinates(int x1, int y1, int x2, int y2)
{
  if(x2 - x1 == 0)
    assert((y2 - y1 == 1) || (y2 - y1 == -1));
  else if(y2 - y1 == 0)
    assert((x2 - x1 == 1) || (x2 - x1 == -1));
  else
    assert(0);
}

void verify()
{
//   1 Число перекрестков не более 7, то есть число клеток, по которым кривая прошла дважды или прошли 
//две кривые, не более 7.
//   2 Каждый перекресток является перекрестков не более двух кусков, то есть нет точек, по которым кривая 
//прошла более 2 раз или прошло более двух кривых.
//   3 Для каждой змейки задана непрерывная кривая, то есть из клетки i попадаем в клетку i+1, 
//если у них есть общая сторона.
//   4 Каждая змейка съедает свой хвост, то есть у последней и первой клетки есть общая сторона.

  assert (MINk <= k && k <= MAXk);

 int i, j, n;
 int S[MAXm][MAXm];
 // check coordinates
 for (i = 0; i < k; i++)
 {
  assert (MINlen <= len[i] && len[i] <= MAXlen);
  for (j = 0; j < len[i]; j++)
  {
   assert (1 <= snakes[i][j][0] && snakes[i][j][0] <= MAXm);
   assert (1 <= snakes[i][j][1] && snakes[i][j][1] <= MAXm);
  }
 }

  for(i = 0; i < MAXm; i++)
    for(j = 0; j < MAXm; j++)
      S[i][j] = 0;
  for(i = 0; i < k; i++)
    for(j = 0; j < len[i]; j++)
      S[snakes[i][j][0]-1][snakes[i][j][1]-1]++;


  for(i = 0; i < MAXm; i++)
    for(j = 0; j < MAXm; j++)
      assert(S[i][j] <= 2);
  
  // check paths
  for(i = 0; i < k; i++)
    for(j = 0; j < len[i]; j++)
      test_coordinates(snakes[i][j][0], snakes[i][j][1], snakes[i][(j + 1)%len[i]][0], snakes[i][(j + 1)%len[i]][1]);

  n = 0;
  for(i = 0; i < MAXm; i++)
    for(j = 0; j < MAXm; j++)
      if(S[i][j] == 2)
        n++;
  assert(MINn <= n && n <= MAXn);
}

int main (void)
{
  registerValidation();

  k = inf.readLong(MINk, MAXk);
  inf.readEoln();
 
  for(int i = 0; i < k; i++)
  {
    len[i] = inf.readInt(MINlen, MAXlen);
    inf.readSpace();
    
    for(int j = 0; j < len[i]; j++)
    {
      snakes[i][j][0] = inf.readInt(MINc, MAXc);
      inf.readSpace();
      snakes[i][j][1] = inf.readInt(MINc, MAXc);  
      if(j + 1 < len[i])
        inf.readSpace();
      else
        inf.readEoln();
    }  
  }

  verify();

  inf.readEof();
  return 0;
}

