import java.io.*; import java.util.*; public class csci { public static void main(String args[]) { String queries[]; // ArrayList> pages; int linkDist[][]; int score[][]; try { Scanner sc = new Scanner(new File("csci.in")); int num_datasets = sc.nextInt(); for(int i = 0; i < num_datasets; i++) { int num_query = sc.nextInt(); int num_pages = sc.nextInt(); queries = new String[num_query]; // pages = new ArrayList>(); linkDist = new int[num_pages][4]; score = new int[num_query][num_pages]; for(int j = 0; j < num_query; j++) { queries[j] = sc.next(); for(int m = 0; m < num_pages; m++) { score[j][m] = 0; } } for(int j = 0; j < num_pages; j++) { // ArrayList page = new ArrayList(); ArrayList queue = new ArrayList(); for(int m = 0; m < num_pages; m++) { linkDist[m][0] = 4; linkDist[m][1] = 5; linkDist[m][2] = 5; linkDist[m][3] = 5; } String temp; do { temp = sc.next(); } while(temp.equals("\n")); // System.out.println("Debug1: "+temp); int num_lines = Integer.parseInt(temp); // int num_lines = sc.nextInt(); for(int k = 0; k < num_lines; k++) { String line; do { line = sc.nextLine(); } while(line.equals("")); // System.out.println("Debug2: "+line); Scanner lsc = new Scanner(line); while(lsc.hasNext()) { String word = lsc.next(); // page.add(word); if(word.charAt(0) == '[' && word.charAt(word.length()-1) == ']') { int comma = word.indexOf(','); int page_ref = Integer.parseInt(word.substring(comma+1,word.length()-1)); word = word.substring(1,comma); for(int l = 0; l < 4; l++) { if(linkDist[page_ref-1][l] >= 4) { linkDist[page_ref-1][l] = 0; break; } } for(int l = 0; l < queue.size(); l++) { for(int m = 0; m < num_query; m++) { if(queries[m].equals(queue.get(l))) { score[m][page_ref-1] += (4 - (queue.size() - l)); } } } } queue.add(word); while(queue.size() > 3) queue.remove(0); for(int l = 0; l < num_query; l++) { if(queries[l].equals(word)) { score[l][j]++; // update this page // update nearby linked pages for(int m = 0; m < num_pages; m++) { for(int n = 0; n < 4; n++) { if(linkDist[m][n] < 4) score[l][m] += (4 - linkDist[m][n]); } } } } for(int m = 0; m < num_pages; m++) { for(int n = 0; n < 4; n++) { linkDist[m][n]++; } } } } } System.out.println("Data Set "+(i+1)+":"); for(int j = 0; j < num_query; j++) { int max = -1; for(int k = 0; k < num_pages; k++) { if(score[j][k] > max) max = score[j][k]; } int count = 0; for(int k = 0; k < num_pages; k++) { if(score[j][k] == max) { if(count == 0) { System.out.print((k+1)); } else { System.out.print(" " + (k+1)); } count++; } } System.out.println(); } } } catch(IOException e) { System.out.println(e); } } }