#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于 qsort
int compare(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
// 判断数字 i 是否连续包含数字 j
int contains(int i, int j) { // 比如I是123,R是0
if (i < j) return 0; // 如果123 < 0, 证明没有包含关系
int tempI = i;
int tempJ = j;
if (tempJ == 0) {
while (tempI / 10 != 0) {
if (tempI % 10 == 0) return 1;
else tempI /= 10;
}
return 0;
} else {
while (tempJ > 0 && tempI > 0) {
if (tempI % 10 == tempJ % 10) {
// printf("%d contains %d's last digit\n", tempI, tempJ);
while(tempI % 10 == tempJ % 10){
tempI /= 10;
tempJ /= 10;
if(tempJ == 0) {
return 1;
}
if(tempI % 10 != tempJ % 10){
tempJ = j;
break;
}
}
} else {
tempI /= 10;
}
}
}
return tempJ == 0;
}
int main() {
int I[101];
int R[101];
int numOfI, numOfR;
scanf("%d", &numOfI);
for (int i = 0; i < numOfI; i++) {
scanf("%d", &I[i]);
}
//test
// for (int i = 0; i < numOfI; i++) {
// printf("%d\n", I[i]);
// }
scanf("%d", &numOfR);
for (int i = 0; i < numOfR; i++) {
scanf("%d", &R[i]);
}
//test
// for (int i = 0; i < numOfR; i++) {
// printf("%d\n", R[i]);
// }
// 使用 qsort 对 R 进行排序
qsort(R, numOfR, sizeof(int), compare);
//test
// for (int i = 0; i < numOfR; i++) {
// printf("%d\n", R[i]);
// }
// 去重并更新 numOfR
int newR[numOfR + 1];
int newNumOfR = 0;
for (int i = 0; i < numOfR; i++) {
if (R[i] == R[i + 1]) {
// 如果后面的数字和这个数字相同,我们需要跳过相同的数字
newR[newNumOfR++] = R[i];
while (R[i] == R[i + 1]) { //直到遇到下一个新的数字我们停止
i++;
}
} else {
newR[newNumOfR++] = R[i];
}
}
numOfR = newNumOfR;
//test
// for (int i = 0; i < numOfR; i++) {
// printf("%d\n", newR[i]);
// }
// 一个是满足条件的I的个数,一个是满足条件的I的索引
int qualifyI[numOfR];
int indexOfI[numOfR][100];
for (int i = 0; i < numOfR; i++) {
qualifyI[i] = 0;
}
int total = 0;
for (int i = 0; i < numOfR; i++) {
for (int j = 0; j < numOfI; j++) {
if (contains(I[j], newR[i])) {
// printf("find %d contains %d\n", I[j], newR[i]);
// int foundDuplicate = 0;
// for (int k = 0; k < qualifyI[i]; k++) {
// if (I[indexOfI[i][k]] == I[j]) {
// foundDuplicate = 1;
// break;
// }
// }
// if (!foundDuplicate) {
indexOfI[i][qualifyI[i]++] = j;
// }
}
}
if (qualifyI[i] != 0) {
total += 2 * qualifyI[i] + 2;
}
}
printf("%d ", total);
for (int i = 0; i < numOfR; i++) {
if (qualifyI[i] > 0) {
printf("%d ", newR[i]);
printf("%d ", qualifyI[i]);
for (int j = 0; j < qualifyI[i]; j++) {
printf("%d ", indexOfI[i][j]);
printf("%d ", I[indexOfI[i][j]]);
}
}
}
printf("\n");
return 0;
}