import java.util.*; public class DN10_63230122 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int[] tip = new int[n]; for (int i = 0; i < n; i++) { tip[i] = sc.nextInt(); } Vrstica.nastaviTip(tip); int steviloKriterijev = sc.nextInt(); int[] kriteriji = new int[steviloKriterijev]; for (int i = 0; i < steviloKriterijev; i++) { kriteriji[i] = sc.nextInt(); } Vrstica.nastaviKriterije(kriteriji); ArrayList preglednica = new ArrayList<>(); for (int i = 0; i < m; i++) { String[] podatki = new String[n]; for (int j = 0; j < n; j++) { podatki[j] = sc.next(); } preglednica.add(new Vrstica(podatki)); } Collections.sort(preglednica); for (Vrstica vrstica : preglednica) { System.out.println(vrstica); } } } class Vrstica implements Comparable { private String[] podatki; private static int[] kriteriji; private static int[] tip; public Vrstica(String[] podatki) { this.podatki = podatki; } public static void nastaviKriterije(int[] k) { kriteriji = k; } public static void nastaviTip(int[] tip) { Vrstica.tip = tip; } @Override public int compareTo(Vrstica druga) { for (int i = 0; i < kriteriji.length; i++) { int kriterij = kriteriji[i]; int tipInt = tip[Math.abs(kriterij) - 1]; int rezultat = primerjajPodatke(podatki[Math.abs(kriterij) - 1], druga.podatki[Math.abs(kriterij) - 1], tipInt); if (rezultat != 0) { return (kriterij > 0) ? rezultat : -rezultat; } } return 0; } private static int primerjajPodatke(String a, String b, int tip) { switch (tip) { case 1: return Integer.compare(Integer.parseInt(a), Integer.parseInt(b)); case 2: return a.compareTo(b); case 3: return primerjajTip3(a, b); default: return 0; } } private static int primerjajTip3(String a, String b) { String[] urejeniTip3 = {"da", "ne", "morda"}; int indeksA = -1; int indeksB = -1; for (int i = 0; i < urejeniTip3.length; i++) { if (a.equals(urejeniTip3[i])) { indeksA = i; } if (b.equals(urejeniTip3[i])) { indeksB = i; } } return Integer.compare(indeksA, indeksB); } @Override public String toString() { return String.join("|", podatki); } }