import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { // 使用BufferedReader提高输入效率 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] firstLine = br.readLine().split(" "); int n = Integer.parseInt(firstLine[0]); int m = Integer.parseInt(firstLine[1]); String[] initialQueue = br.readLine().split(" "); // 存储每个元素的前驱和后继 Map<String, String> prev = new HashMap<>(); Map<String, String> next = new HashMap<>(); // 初始化队列关系 for (int i = 0; i < n; i++) { String current = initialQueue[i]; // 设置前驱 if (i > 0) { prev.put(current, initialQueue[i - 1]); } else { prev.put(current, null); } // 设置后继 if (i < n - 1) { next.put(current, initialQueue[i + 1]); } else { next.put(current, null); } } // 处理每一次插队事件 for (int i = 0; i < m; i++) { String[] parts = br.readLine().split(" "); String x = parts[0]; // 要插队的人 String y = parts[1]; // 要插到谁前面 // 步骤1: 把x从当前位置移除 String px = prev.get(x); // x的前驱 String nx = next.get(x); // x的后继 // 更新前驱的后继 if (px != null) { next.put(px, nx); } // 更新后继的前驱 if (nx != null) { prev.put(nx, px); } // 步骤2: 把x插入到y前面 String py = prev.get(y); // y的前驱 // 设置x的前驱和后继 prev.put(x, py); next.put(x, y); // 更新y的前驱的后继 if (py != null) { next.put(py, x); } // 更新y的前驱为x prev.put(y, x); } // 找到队列的头节点(前驱为null的节点) String head = null; for (String person : initialQueue) { if (prev.get(person) == null) { head = person; break; } } // 遍历队列,构建结果 List<String> result = new ArrayList<>(); String current = head; while (current != null) { result.add(current); current = next.get(current); } // 输出结果 System.out.println(String.join(" ", result)); } }