// Arup Guha
// 10/14/2015
// Solution to 2000 UCF HS Contest Problem: Soul Tracker

// Note: The posted judge data uses "Genesis CD" instead of "Invisible Touch CD" as the starting point for the search.

import java.util.*;

public class soultrak {

	final public static int NOT_FOUND = -1;
	final public static String START = "Genesis CD"; // According to spec should be "Invisible Touch CD"
	final public static String END = "Homogenic CD";

	public static void main(String[] args) {

		Scanner stdin = new Scanner(System.in);
		int numCases = Integer.parseInt(stdin.nextLine());

		// Process each case.
		for (int loop=1; loop<=numCases; loop++) {

			// To store mapping of strings to integers for graph.
			HashMap<String,Integer> map = new HashMap<String,Integer>();
			int vindex = 0 ;

			// Need to pre-store edges...annoying.
			int e = Integer.parseInt(stdin.nextLine());
			int[][] edges = new int[e][2];

			// Read each edge.
			for (int i=0; i<e; i++) {

				// Don't need this.
				stdin.nextLine();

				// Get index of first vertex.
				String v1 = stdin.nextLine();
				int index1 = -1;
				if (!map.containsKey(v1)) {
					map.put(v1, vindex);
					index1 = vindex;
					vindex++;
				}
				else
					index1 = map.get(v1);

				// And second vertex.
				String v2 = stdin.nextLine();
				int index2 = -1;
				if (!map.containsKey(v2)) {
					map.put(v2, vindex);
					index2 = vindex;
					vindex++;
				}
				else
					index2 = map.get(v2);

				// Add to edge list.
				edges[i][0] = index1;
				edges[i][1] = index2;
			}

			// Now we can form graph.
			ArrayList[] graph = new ArrayList[vindex];
			for (int i=0; i<vindex; i++) graph[i] = new ArrayList<Integer>();

			// Store each edge.
			for (int i=0; i<e; i++) {
				graph[edges[i][0]].add(edges[i][1]);
				graph[edges[i][1]].add(edges[i][0]);
			}

			// Get vertices for search.
			int startV = map.containsKey(START) ? map.get(START) : NOT_FOUND;
			int endV = map.containsKey(END) ? map.get(END) : NOT_FOUND;

			// Initially false.
			boolean result = false;

			// Only run a DFS if we have to.
			if (startV != NOT_FOUND && endV != NOT_FOUND) {
				boolean[] used = new boolean[vindex];
				dfs(graph, used, startV);
				result = used[endV];
			}

			// Report result.
			if (!result) System.out.println("I am doomed to hell for all eternity!");
			else		System.out.println("I can get my soul back!");
		}
	}

	// Typical DFS on graph starting at v.
	public static void dfs(ArrayList[] graph, boolean[] used, int v) {
		used[v] = true;
		for (int i=0; i<graph[v].size(); i++) {
			int next = ((ArrayList<Integer>)graph[v]).get(i);
			if (!used[next])
				dfs(graph, used, next);
		}
	}
}