import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class SortTrails { static final int MaxClearing = 500; static public Set trail[][]; public static void addTrail(int c1, int c2, Set animals) { trail[c1][c2] = animals; trail[c2][c1] = animals; } public static void printTrails() { for (int i = 0; i < MaxClearing; i++) { for (int j = i+1; j < MaxClearing; j++) { Set a = trail[i][j]; if (a != null) { System.out.print(i+" "+j); for (String s : a) { System.out.print(" "+s); } System.out.println(); } } } } // find trail to neighboring clearing with animal a public static int findNeighbor(int c, String a) { for (int i = 0; i< MaxClearing; i++) { if (trail[c][i] != null) { for (String s : trail[c][i]) { if (a.equals(s)) return i; } } } return -1; } public static void main(String[] argv) { int c1 = 0, c2 = 0; trail = new TreeSet[MaxClearing][MaxClearing]; Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { Scanner lsc = new Scanner(sc.nextLine()); // read in trails if (lsc.hasNextInt()) { c1 = lsc.nextInt(); c2 = lsc.nextInt(); Set animals = new TreeSet(); while (lsc.hasNext()) { animals.add(lsc.next()); } addTrail(c1, c2, animals); continue; } } printTrails(); } }