#include <bits/stdc++.h>
#include <iostream>
#include <string>
using namespace std;
class Node {
public :
char c;
Node* arr[5];
int count;
bool word;
};
class TrieDictionary {
public :
Node root;
void insertWord(string word) {
int i = 0, max = word.length();
Node* walker = &root;
walker -> count += max;
while (i < max) {
char c = word[i];
int index = c - 97;
if (walker -> arr[index] == NULL) {
Node* newnode;
newnode -> c = c;
walker -> arr[index] = newnode;
}
walker = walker -> arr[index];
walker -> count += ((max-1) - i);
if (i == word.length() - 1) {
walker -> word = true;
}
i++;
}
}
Node* buildPossibilities(string pattern) {
Node* walker = &root;
int i = 0;
try {
while (i < pattern.length()) {
walker = walker -> arr[pattern.at(i) - 97];
i++;
}
} catch (...) {
return NULL;
}
return walker;
}
void asLeftAsPossible(Node* walker, string prefix) {
cout << prefix;
while (true) {
if (walker -> word) {
return;
}
bool m = false;
for (int i = 0; i < 5; i++) {
if (walker -> arr[i] != NULL) {
cout << walker -> arr[i] -> c;
walker = walker -> arr[i];
m = true;
break;
}
if (m) {
continue;
}
}
break;
}
}
void asRightAsPossible(Node* walker, string prefix) {
cout << prefix;
while (true) {
bool m = false;
for (int i = 4; i >= 0; i--) {
if (walker -> arr[i] != NULL) {
cout << walker -> arr[i] -> c;
walker = walker -> arr[i];
m = true;
break;
}
if (m) {
continue;
}
}
break;
}
}
};
int main() {
TrieDictionary *trieDictionary = new TrieDictionary;
int N, Q;
cin >> N;
for (int i = 0; i < N; i++) {
string poem;
cin >> poem;
trieDictionary -> insertWord(poem);
}
cin >> Q;
for (int i = 0; i < Q; i++) {
string prefix;
cin >> prefix;
Node* walker = trieDictionary -> buildPossibilities(prefix);
if (walker == NULL) {
cout << -1 << " \n";
continue;
}
cout << walker -> count;
cout << " ";
trieDictionary -> asLeftAsPossible(walker, prefix);
cout << " ";
trieDictionary -> asRightAsPossible(walker, prefix);
cout << "\n";
}
return 0;
}