import java.util.*; import java.util.stream.*; public class DN10_63230317 { static class Trit implements Comparable { int vrednost; public Trit (String s) { vrednost = 3; if (s.equals("da")) vrednost = 0; if (s.equals("ne")) vrednost = 1; if (s.equals("morda")) vrednost = 2; } @Override public String toString () { String s[] = new String[]{"da", "ne", "morda", "nedefinirano"}; return s[vrednost]; } @Override public int compareTo (Trit o) { return Integer.compare(vrednost, o.vrednost); } } static class Vrednost implements Comparable { int tip; String niz; Trit trit; int št; public Vrednost (String s) { tip = 2; niz = s; } public Vrednost (Trit t) { tip = 3; trit = t; } public Vrednost (int š) { tip = 1; št = š; } @Override public String toString () { switch (tip) { case 1: return Integer.valueOf(št).toString(); case 2: return niz; case 3: return trit.toString(); } return null; } @Override public int compareTo (Vrednost o) { if (tip != o.tip) return Integer.compare(tip, o.tip); switch (tip) { case 1: return Integer.compare(št, o.št); case 2: return niz.compareTo(o.niz); case 3: return trit.compareTo(o.trit); } throw new RuntimeException("unreachable"); } } static class Vrstica { Vrednost stolpci[]; public Vrstica (Vrednost[] s) { stolpci = s; } public Vrstica (int tipi[], String s) { stolpci = new Vrednost[tipi.length]; int i = 0; if (s.split(" ").length != tipi.length) throw new RuntimeException("nepravilno število stolpcev. niz je " + s + ", tipov je " + tipi.length); for (String a : s.split(" ")) { switch (tipi[i]) { case 1: stolpci[i++] = new Vrednost(Integer.parseInt(a)); continue; case 2: stolpci[i++] = new Vrednost(a); continue; case 3: stolpci[i++] = new Vrednost(new Trit(a)); continue; } throw new RuntimeException("nepoznan tip"); } } static class Primerjalnik implements Comparator { int kriteriji[]; public Primerjalnik (int[] k) { kriteriji = k; } @Override public int compare (Vrstica a, Vrstica b) { for (int i = 0; i < kriteriji.length; i++) { int r = a.stolpci[(int) Math.abs(kriteriji[i])-1].compareTo(b.stolpci[(int) Math.abs(kriteriji[i])-1]); if (r == 0) continue; return (int) Math.signum(kriteriji[i])*r; } return 0; } } public static Comparator primerjalnik (int[] kriteriji) { return new Primerjalnik(kriteriji); } @Override public String toString () { return String.join("|", Arrays.asList(stolpci).stream().map(s -> s.toString()).collect(Collectors.toList())); } } public static void main (String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int tipi[] = new int[n]; for (int i = 0; i < n; i++) tipi[i] = sc.nextInt(); int k = sc.nextInt(); int kriteriji[] = new int[k]; for (int i = 0; i < k; i++) kriteriji[i] = sc.nextInt(); sc.nextLine(); // preskočimo do konca te vrstice s številkami ArrayList vrstice = new ArrayList<>(); for (int i = 0; i < m; i++) { String besedilo = sc.nextLine(); if (besedilo.equals("")) throw new RuntimeException("prazna vrstica na indeksu " + i + " od skupno " + m); vrstice.add(new Vrstica(tipi, besedilo)); } Collections.sort(vrstice, Vrstica.primerjalnik(kriteriji)); for (Vrstica vrstica : vrstice) System.out.println(vrstica.toString()); } }