/* KSP 14-1-2
 * Orientacni beh
 *
 * Petr Baudis
 * Rocnik: 2
 * Skola: Ad Fontes
 */


/*
 * Vstup:
 * N\n
 * N-krat radky se seznamem cisel zavodniku
 *
 * Vystup:
 * radek se seznamem cisel vyskytujicich se na vsech radcich
 *
 * Algoritmus:
 *
 * Mame pole velke tak, aby se do nej vesel i index rovny
 * nejvyssimu cislu bezce, ktere dostaneme. Pak pri kazdem vyskytu
 * cisla onoho bezce inkrementujeme danou polozku pole. Po
 * ukonceni vstupu projdeme cele pole a vypiseme vsechny indexy,
 * na kterych se nachazi cislo rovne poctu stanovist.
 *
 * Pametova narocnost O(N), casova narocnost O(N).
 */


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


int nums = 0;
int *num = NULL;


int
main() {
  char inb[256];
  int no, n;

  fgets(inb, 256, stdin);
  no = atoi(inb);
  if (! no) {
    printf("NE\n");
    exit(1);
  }

  for (n = no; n; n--) {
    char *tok = inb;
    int in;
    
    fgets(inb, 256, stdin);
    
    /* pro kazde cislo v radce */
    while (*tok) {
      if (! isdigit(*tok)) {
	tok++;
	continue;
      }

      /* nacti cislo */
      in = strtol(tok, &tok, 10);

      if (in < 1) {
	printf("NE\n");
	exit(2);
      }

      /* musime realokovat pole */
      if (in > nums) {
	int n2;
	
	num = realloc(num, in);
	if (! num) {
	  printf("NE\n");
	  exit(3);
	}

	/* inicializuj cerstvou cast */
	for (n2 = nums; n2 < in; n2++)
	  num[n2] = 0;
	
	nums = in;
      }

      /* tady je to dulezite :-) */
      num[in - 1]++;
    }
  }

  /* vypis vsechna cisla ktera byla inkrementovana u kazdeho stanoviste */
  for (n = 0; n < nums; n++)
    if (num[n] == no)
      printf("%d ", n + 1);
  
  printf("\n");
  
  return 0;
}
