/**
 * Задача "Соло на клавиатуре"
 * 1-я личная интернет-олимпиада сезона 2009-2010.
 * Автор задачи: Максим Буздалов, buzdalov@rain.ifmo.ru
 * Автор решения: Ганеев Рустам, ganeev@rain.ifmo.ru
 *
 *
 */

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class keyboard_rg_tl {
	public static void main(String[] args) throws IOException {
		new keyboard_rg_tl().run();
	}

	BufferedReader br;
	StringTokenizer st;
	PrintWriter out;
	boolean eof = false;

	public void run() throws IOException {
		br = new BufferedReader(new FileReader("keyboard.in"));
		out = new PrintWriter("keyboard.out");
		solve();
		out.close();
	}

	String nextToken() {
		while (st == null || !st.hasMoreTokens()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (Exception e) {
				eof = true;
				return "0";
			}
		}
		return st.nextToken();
	}

	int nextInt() {
		return Integer.parseInt(nextToken());
	}


	final String letters[] = { "qwertyuiop", "asdfghjkl", "zxcvbnm" };

	String deleteChar(String src, int k) {// удаление символа
		if (k == src.length() - 1)
			return src.substring(0, k);
		else
			return src.substring(0, k) + src.substring(k + 1, src.length());
	}

	String changeChar(String src, int k, char c) {// изменение символа
		if (src.length() == 1)
			return "" + c;
		if (k == src.length() - 1)
			return (src.substring(0, k) + c);
		else
			return src.substring(0, k) + c + src.substring(k + 1, src.length());
	}

	String insertChar(String src, int k, char c) {// вставка символа
		if (src.length() == 1)
			return "" + c;
		if (k == src.length())
			return src + c;
		else
			return src.substring(0, k) + c + src.substring(k, src.length());
	}

	HashMap<String, TreeSet<String>> wrong = new HashMap<String, TreeSet<String>>();
	HashMap<Character, ArrayList<Character>> neigh = new HashMap<Character, ArrayList<Character>>();

	void init() {
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < letters[i].length(); j++) {
				neigh.put(letters[i].charAt(j), new ArrayList<Character>());
				if (j > 0) {
					neigh.get(letters[i].charAt(j)).add(
							letters[i].charAt(j - 1));
				}
				if (j < letters[i].length() - 1) {
					neigh.get(letters[i].charAt(j)).add(
							letters[i].charAt(j + 1));
				}
				if (i < 2) {
					if (j > 0 && letters[i + 1].length() >= j) {
						neigh.get(letters[i].charAt(j)).add(
								letters[i + 1].charAt(j - 1));
					}
					if (j < letters[i + 1].length())
						neigh.get(letters[i].charAt(j)).add(
								letters[i + 1].charAt(j));
				}
				if (i > 0) {
					neigh.get(letters[i].charAt(j)).add(
							letters[i - 1].charAt(j));
					neigh.get(letters[i].charAt(j)).add(
							letters[i - 1].charAt(j + 1));
				}
			}
		}
	}

	private void solve() throws IOException {
		init();
		int n = nextInt();
		for (int i = 0; i < n; i++) {
			String p = nextToken();
			TreeSet<String> tmpword = wrong.get(p);
			if (tmpword == null) {
				tmpword = new TreeSet<String>();
				wrong.put(p, tmpword);
			}
			tmpword.add(p);
			// удаляем символ
			if (p.length() > 1) {
				for (int j = 0; j < p.length(); j++) {
					String tmp = deleteChar(p, j);
					tmpword = wrong.get(tmp);
					if (tmpword == null) {
						tmpword = new TreeSet<String>();
						wrong.put(tmp, tmpword);
					}
					tmpword.add(p);
				}
			}
			for (int j = 0; j < p.length(); j++) {
				ArrayList<Character> tmp = neigh.get(p.charAt(j));
				for (char c : tmp) {
					// cимвол меняем на соседа
					String tmpS = changeChar(p, j, c);
					tmpword = wrong.get(tmpS);
					if (tmpword == null) {
						tmpword = new TreeSet<String>();
						wrong.put(tmpS, tmpword);
					}
					tmpword.add(p);
					// добавили соседа в начало
					tmpS = insertChar(p, j, c);
					tmpword = wrong.get(tmpS);
					if (tmpword == null) {
						tmpword = new TreeSet<String>();
						wrong.put(tmpS, tmpword);
					}
					tmpword.add(p);
					// добавить в конец
					tmpS = insertChar(p, j + 1, c);
					tmpword = wrong.get(tmpS);
					if (tmpword == null) {
						tmpword = new TreeSet<String>();
						wrong.put(tmpS, tmpword);
					}
					tmpword.add(p);
				}
			}

		}
		int m = nextInt();
		for (int i = 0; i < m; i++) {
			String p = nextToken();
			TreeSet<String> tmp = wrong.get(p);
			if (tmp != null) {
				out.println(tmp.size());
				int k = 0;
				Iterator<String> iterator = tmp.iterator();
				while (iterator.hasNext()) {
					out.println(iterator.next() + " ");
					k++;
					if (k == 5)
						break;
				}
			} else
				out.println(0);
		}
	}
}