import java.util.*; public class DN11_63230317 { static class Rezultat { String tekmovalec; String država; String disciplina; int točke; public Rezultat (String te, String dr, String di, int to) { tekmovalec = te; država = dr; disciplina = di; točke = to; } static class Primerjalnik implements Comparator { int pravila[]; boolean obratno[]; public Primerjalnik (int[] p, boolean[] o) { pravila = p; obratno = o; } @Override public int compare (Rezultat a, Rezultat b) { for (int i = 0; i < pravila.length; i++) { if (pravila[i] == 0) { int r = a.tekmovalec.compareTo(b.tekmovalec); if (r != 0) return obratno[i] ? -r : r; } if (pravila[i] == 1) { int r = a.država.compareTo(b.država); if (r != 0) return obratno[i] ? -r : r; } if (pravila[i] == 2) { int r = a.disciplina.compareTo(b.disciplina); if (r != 0) return obratno[i] ? -r : r; } if (pravila[i] == 3) { int r = Integer.compare(a.točke, b.točke); if (r != 0) return obratno[i] ? -r : r; } } return 0; } } } static class Trojka implements Comparable { // zares Nka int[] trojka; public Trojka (int[] a) { trojka = a; } @Override public int compareTo (Trojka o) { if (o.trojka.length < trojka.length) return -1; if (o.trojka.length > trojka.length) return 1; for (int i = 0; i < trojka.length; i++) if (Integer.compare(trojka[i], o.trojka[i]) != 0) return Integer.compare(trojka[i], o.trojka[i]); return 0; } } public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int u = sc.nextInt(); ArrayList rezultati = new ArrayList<>(); for (int i = 0; i < n; i++) { String tekmovalec = sc.next(); String država = sc.next(); String disciplina = sc.next(); int točke = sc.nextInt(); rezultati.add(new Rezultat(tekmovalec, država, disciplina, točke)); } String prejšnja = ""; String prejšnji = ""; switch (u) { case 1: Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{1, 0, 2, 3}, new boolean[]{false, false, false, false})); for (Rezultat rezultat : rezultati) { if (!prejšnja.equals(rezultat.država)) { System.out.println("[" + rezultat.država + "]"); prejšnja = rezultat.država; prejšnji = ""; } if (!prejšnji.equals(rezultat.tekmovalec)) System.out.println(" " + rezultat.tekmovalec); prejšnji = rezultat.tekmovalec; } break; case 2: Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{2, 3, 0, 1}, new boolean[]{false, true, false, false})); for (Rezultat rezultat : rezultati) { if (!prejšnja.equals(rezultat.disciplina)) { System.out.println("[" + rezultat.disciplina + "]"); prejšnja = rezultat.disciplina; } System.out.println(" " + rezultat.tekmovalec + " " + rezultat.država + " " + rezultat.točke); } break; case 3: Collections.sort(rezultati, new Rezultat.Primerjalnik(new int[]{2, 3, 0, 1}, new boolean[]{false, true, false, false})); Map države = new TreeMap<>(); int i = 0; for (Rezultat rezultat : rezultati) { if (!prejšnja.equals(rezultat.disciplina)) { prejšnja = rezultat.disciplina; i = 0; } Trojka cur = države.get(rezultat.država); if (cur == null) { cur = new Trojka(new int[]{0, 0, 0}); države.put(rezultat.država, cur); } if (i < 3) cur.trojka[i++]++; } ArrayList urejeneDržave = new ArrayList<>(); for (String key : države.keySet()) urejeneDržave.add(new Država(key, države.get(key))); Collections.sort(urejeneDržave); for (Država država : urejeneDržave) System.out.println(država); break; } } static class Država implements Comparable { String ime; Trojka medalje; public Država (String i, Trojka m) { ime = i; medalje = m; } @Override public int compareTo (Država o) { return -medalje.compareTo(o.medalje); } @Override public String toString () { return ime + " " + medalje.trojka[0] + " " + medalje.trojka[1] + " " + medalje.trojka[2]; } } }