/* KSP 14-1-3
 * Elektricka vedeni
 * 
 * Petr Baudis
 * Rocnik: 2
 * Skola: Ad Fontes
 */

/*
 * Vstup:
 * N\n
 * N-krat A B kde A a B jsou cisla koncovych stanic
 *
 * Vystup:
 * N\n
 * N-krat A kde A je cislo jedne ze stanic kde by melo byt stredisko
 *
 * Algoritmus:
 *
 * Pri nacitani jednotlivych stanic si je ukladame do nehiearchicke site, kde
 * kazdy uzel obsahuje pointery na vsechny okolni uzly a flag, jestli je tam
 * umisteno stredisko. Zaroven si udrzujeme pointer na zatim nejvetsi stanici.
 *
 * Po nacteni vsech dat se od nejvetsiho (ci jednoho z nejvetsich) nalezeneho
 * uzlu postupuje po spojenich vzdy k sousednim, od nich k dalsim, apod. Pokud
 * budou u urciteho uzlu prohledana vsechna spojeni s vyjimkou toho, po kterem
 * jsme k uzlu prisli, zkontrolujeme, jestli je na vsech stredisko. Pokud ne,
 * na aktualnim uzlu stredisko vytvorime, a vratime se opet o uroven vyse. Na
 * koncovych uzlech (ze kterych zadne dalsi spojeni nevede) stredisko
 * nevytvarime.
 *
 * Pametova slozitost je O(N), protoze pro kazdou stanici alokujeme pouze jednu
 * strukturu plus jeden pointer na int. Casova slozitost je take O(N), protoze
 * kazdy uzel projdeme prave jednou.
 */


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


typedef struct {
  int links;
  int *link;
  char center;
} station_t;


int stations = 0;
station_t *station = NULL;

int centers = 0;

int biggest = 0;
int biggestn = 0;

void
walk(int from, int came) {
  int no;
  
  for (no = 0; no < station[from].links; no++)
    if (station[from].link[no] != came) {
      walk(station[from].link[no], from);
      if (! station[station[from].link[no]].center)
	station[from].center++;
    }
  
  if (station[from].center)
    centers++;
}


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

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

  for (n = 1; n < no; n++) {
    int a, b;

    scanf("%d %d", &a, &b);
    
    /* musime realokovat pole */
    if (a > stations || b > stations) {
      int max = a > b? a: b;
      
      station = realloc(station, max * sizeof(station_t));
      if (! station) {
	printf("NE\n");
	exit(3);
      }

      /* inicializuj cerstvou cast */
      memset(&station[stations], 0, (max - stations) * sizeof(station_t));
      
      stations = max;
    }

    /* indexy v poli jsou od nuly, ne od jednicky */
    a--;
    b--;
    
    /* pridej spojeni */
    station[a].links++;
    station[b].links++;
    station[a].link = realloc(station[a].link, station[a].links * sizeof(int *));
    station[b].link = realloc(station[b].link, station[b].links * sizeof(int *));
    station[a].link[station[a].links - 1] = b;
    station[b].link[station[b].links - 1] = a;

    /* aktualizuj informaci o nejvetsi stanici */
    if (station[b].links > biggest) {
      biggest = station[b].links;
      biggestn = b;
    }

    if (station[a].links > biggest) {
      biggest = station[a].links;
      biggestn = a;
    }
  }

  /* projdi celou sit z nejvetsi stanice */
  station[biggestn].center = 1;
  walk(biggestn, biggestn);

  /* vypis vsechny stanice se strediskem */
  printf("%d\n", centers);
  
  for (n = 0; n < stations; n++)
    if (station[n].center)
      printf("%d ", n + 1);
  
  printf("\n");
  
  return 0;
}
