import java.io.*;

class TopoSort
{ 
    int n;
    Element [] Liste; // Liste aller Elemente
    Element [] freieElemente; // Liste der Elemente ohne Vorgänger
    int AnzfreieElemente;     // (als Stapel gespeichert)

    static IntReader input;

public static void main (String[] args) throws IOException
    {
	input = new IntReader(args);
	TopoSort x = new TopoSort();
    }

TopoSort() throws IOException
{
    System.out.println("Topologischen Sortieren.");
    // Einlesen
    n = input.readInt();
        
    // Inititalisieren array:
    Liste = new Element [n+1];
    for (int i=1; i<=n; i++) Liste[i] = new Element(i);

    // Einlesen Paare
    try	{ 
	for (;;) {
	    Element e = Liste[input.readInt()];
	    Element f = Liste[input.readInt()];
	    Paar x = new Paar(e,f);
	    x.next = e.ersterNachfolger;
	    e.ersterNachfolger = x;
	    f.anzVorgänger++;
    }   }
    catch(EOFException e) {}
	
    // Vorbereiten:
    freieElemente = new Element [n];
    AnzfreieElemente = 0;
    for (int i=1; i<=n; i++) {
	Element e = Liste[i];
	if (e.anzVorgänger==0)
	    freieElemente[AnzfreieElemente++]=e;
    }
    // Sortieren:
    System.out.println("");
 sort:
    for (int i=1; i<=n; i++) {
	if (AnzfreieElemente == 0) {
	    System.out.println("Die Eingabe enthält einen Kreis."); 
	    findekreis();
	    break sort;
	}
	// Wähle ein Paar ohne Vorgänger
	Element x = freieElemente[--AnzfreieElemente];
	System.out.println(x);
	// Entferne ausgehende Paare:
	Paar z = x.ersterNachfolger;
	while (z != null) {
	    z.j.anzVorgänger--;
	    if (z.j.anzVorgänger == 0)
		freieElemente[AnzfreieElemente++]=z.j;
	    z = z.next;
	}
    }
}

  void findekreis()
  {
    for (int i=1; i<=n; i++) {
	Element e = Liste[i];
	if (e.anzVorgänger > 0) // if (e wurde noch nicht gelöscht)
	// bearbeite ausgehende Paare:
	{   Paar z = e.ersterNachfolger;
	    while (z != null) {
	        if (z.j.einVorgänger == null) z.j.einVorgänger = e;
	        z = z.next;
	    }
        }
    }
    // Suche Ausgangselement e0
    Element e0=null;
    for (int i=1; i<=n; i++) {
	e0 = Liste[i];
	if (e0.einVorgänger != null) break;
        }
    // Suche Kreis, ausgehend von e0:
    Element e = e0;
    while (!e.schonbesucht) {
        e.schonbesucht = true;
        e = e.einVorgänger;
    }
    // e wurde schon besucht; es gibt einen Kreis, der mit e beginnt.
    // Dieser Kreis wird nun in verkehrter Reihenfolge ausgegeben:
    Element f=e;
    do { System.out.print(" ("+f.einVorgänger+"->"+f+")");
         f = f.einVorgänger;
       }  
    while (f!=e);
    System.out.println(".");
  }
}

class Element{
	int name, anzVorgänger = 0;
	Paar ersterNachfolger = null;
	Element einVorgänger = null;
	boolean schonbesucht = false;
	Element (int i) {
	    name = i;
	}
	public String toString() {return String.valueOf(name); }
}

class Paar {
	Element i,j;
	Paar next;
	Paar(Element ii, Element jj) {i = ii; j = jj;}
}