#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

readdimension()
{
  int dim;
  scanf("%i", &dim);
  return dim;
}

read_row(mat, dim, n)
int *mat;
int dim;
int n;
{
  int *i;
  int j;
  
  i = (int *)malloc((n+1) * sizeof(int));
  
  for (j = 0; j<n+1; ++j)
    if (1 > scanf("%d", &(i[j])))
      return FALSE;
  for (j = 1; j < n+1; ++j)
    mat[dim * (i[0]-1) + i[j] - 1] = 1;
  return TRUE;
}

int *readmatrix(dim, valence)
int dim;
{
  int *mat;
  
  mat = (int *)calloc(dim * dim, sizeof(int));
  while(!feof(stdin) && read_row(mat, dim, valence));
  return mat;
}

void
copymat(m1, m2, dim)
int *m1, *m2, dim;
{
  int i;
  
  for (i = 0; i< dim * dim; ++i)
    m2[i] = m1[i];
}

/* computes the boolean product of m and n and returns TRUE if one of
   the entries would have been bigger than 1, before reduction... the
   product only works for symmetric matrices, alas... */

int 
mprod(m, n, prod,  dim)
int *m, *n, *prod,  dim;
{
  int i, j, k;
  int ind, offset1, offset2;
  int status=FALSE;
  
  for (i=0; i<dim; ++i)
    {
      offset1 = i * dim;
      for (j = 0; j<dim; ++j)
	{
	  offset2 = j * dim;
	  ind = offset1 + j;
	  prod[ind] = 0;
	  if (i != j)
	    {
	      for (k = 0; k<dim; ++k)
		prod[ind] += m[offset1 + k] * n[offset2 + k];

	      if(prod[ind] > 1)
		{
		  status = TRUE;
		  prod[ind] = 1;
		}
	    }
	}
    }
  return (status);
}

int 
msum(m, n, dim)
int *m, *n, dim;
{
  int i;
  
  for (i=0; i< dim * dim; ++i)
    if (m[i] + n[i] > 1)
      {
	return (TRUE);
      }
  return (FALSE);
}

int 
main(argc, argv)
int argc;
char *argv[];
{
  int i;
  int *A, *pow1, *pow2, *tmpmat;
  int n;
  int status1, status2;
  int valence = atoi(argv[1]);
  
  n = readdimension();
  A = readmatrix(n, valence);
  pow1 = (int *) calloc(n * n, sizeof(int));
  pow2 = (int *) calloc(n * n, sizeof(int));
  copymat(A, pow1, n);
  
  for (i=1; i< n; ++i)
    {
      status1 = mprod(A, pow1, pow2, n);
      status2 = msum(pow1, pow2, n);

      if (status2)
	{
	  printf("the girth is %d\n", 2 * i +1);
	  exit(0);
	}
      
      if (status1)
	{
	  printf("the girth is %d\n", 2 * (i+1));
	  exit(0);
	}

      copymat(pow2, pow1, n);
    }
  printf("yikes, I am broken!\n");
  exit(1);
}
