/*
lista na sosedstvo
*/
import java.lang.reflect.Array;
import java.util.*;
class GNode{
public int num;
public E info;
public LinkedList list;
public GNode(){
list = new LinkedList();
}
boolean hasNeighbor(int node){
return list.contains(node);
}
void addNeighbor(int node){
if(!list.contains(node)){
list.add(node);
}
}
void deleteNeighbor(GNode node){
if(list.contains(node)){
list.remove(node);
}
}
}
class Graph {
public int n;
public GNode graph[];
public Graph(int n) {
this.n = n;
graph = new GNode[n];
for(int i = 0; i < n; i++) {
graph[i] = new GNode<>();
}
}
boolean neighbotss(int x, int y) {
return graph[x].hasNeighbor(y);
}
void addEdge(int x, int y) {
graph[x].addNeighbor(y);
graph[y].addNeighbor(x);
} // ako bese nenasocen + kje imavme graph[y].addNeighbor(graph[x]);
void deleteEdge(int x, int y) {
graph[x].deleteNeighbor((graph[y]));
}// ako bese nenasocen + kje imavme graph[y].deleteNeighbor(graph[x])
void dfsListRek(int poseteni[], int start) {
poseteni[start] = 1;
System.out.print(start + " ");
for (int i = 0; i < graph[start].list.size(); i++) {
if (poseteni[graph[start].list.get(i)] == 0) {
dfsListRek(poseteni, graph[start].list.get(i));
}
}
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int gradovi = scanner.nextInt();
int br_patista = scanner.nextInt();
Graph graph = new Graph<>(gradovi);
Map vrski = new HashMap<>();
int indeksiranje = 0;
for(int i = 0; i < br_patista; i++) {
String a = scanner.next();
String b = scanner.next();
if(!vrski.containsKey(a)) {
vrski.put(a, indeksiranje);
indeksiranje++;
}
if(!vrski.containsKey(b)) {
vrski.put(b, indeksiranje);
indeksiranje++;
}
System.out.println(vrski.get(a) + " " + vrski.get(b));
graph.addEdge(vrski.get(a), vrski.get(b));
}
int kolku = scanner.nextInt();
for(int i = 0; i < kolku; i++) {
String grad = scanner.next();
int[] poseteni = new int[gradovi];
graph.dfsListRek(poseteni, vrski.get(grad));
}
}
}