#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
// 判断一个字符串是否是另一个字符串的连续子串
bool isSubstring(const std::string& str, const std::string& subStr) {
return str.find(subStr) != std::string::npos;
}
int main() {
int n;
std::cin >> n;
std::vector<int> dataset(n);
for (int i = 0; i < n; ++i) {
std::cin >> dataset[i];
}
int m;
std::cin >> m;
std::set<int> rulesSet; // 使用 set 自动排序并去重
for (int i = 0; i < m; ++i) {
int rule;
std::cin >> rule;
rulesSet.insert(rule);
}
std::vector<int> rules(rulesSet.begin(), rulesSet.end());
std::vector<int> output;
for (int rule : rules) {
std::vector<std::pair<int, int>> matches;
std::string ruleStr = std::to_string(rule);
for (int i = 0; i < n; ++i) {
std::string dataStr = std::to_string(dataset[i]);
if (isSubstring(dataStr, ruleStr)) {
matches.emplace_back(i, dataset[i]);
}
}
if (!matches.empty()) {
output.push_back(rule);
output.push_back(matches.size());
for (const auto& match : matches) {
output.push_back(match.first);
output.push_back(match.second);
}
}
}
std::cout << output.size();
for (int num : output) {
std::cout << " " << num;
}
std::cout << std::endl;
return 0;
}