//代码中有自己调试的一些代码, 后期自己添加了一些注释, 主要是题目意思太难懂了, 理解了好长时间. 功夫不负有心人, 最后终于用纯c解答了此题, 希望对大家有借鉴意义

include "stdlib.h"

include "stdio.h"

//查看a中是否包括b 如 147 47 --return 1
int isb(int a,int b)
{

int res=0;
int b_num=0;
int b_kvalue=1;
int b2=b;
//printf("a:%d b:%d \n",a,b);
while(b2)
{
    b2=b2/10;
    b_kvalue=b_kvalue*10;      //判断b是几位数字, 则b_kvalue为多少: 如 b=47, b_kvalue为100      
    b_num++;    
} 
while(a>0)
{
    if(a%b_kvalue==b)
    {
        res=1;
        return res;    
    }    
    a=a/10;
}
return res;

}

int main()
{

    int c[10000]={0};
int tem;
int result[10000]={0};
int flag;
int m,n;
   while(scanf("%d",&m) != EOF)
   {
    int index=0;
    int index2=0;
    int index3=0;
    int count_result=0; 
           int c[10000]={0};
int tem;
int result[10000]={0};
int flag;

    //scanf("%d",&m);

    int a[m];
    for(int i=0;i<m;i++)
    {
        scanf("%d",&a[i]);
    }

    scanf("%d",&n);
    int b[n];
    int b2[n];

    for(int i=0;i<n;i++)
    {
        scanf("%d",&b[i]);
    }

    for(int i=0;i<n;i++)
    {
        c[b[i]]++;
    } 
    for(int i=0;i<10000;i++)
    {
        if(c[i]>0)
        {
        //    printf("test:%d\n",i);
            b[index]=i;                    //筒排序, 将b去重然并排序 
            index++;
        }
    }


    /*
    printf("m:%d n:%d index:%d\n",m,n,index);
    for(int i=0;i<m;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
    for(int i=0;i<index;i++)
    {
        printf("%d ",b[i]);
    }
    printf("\n");*/


    for(int i=0;i<index;i++)            //b 个数 
    {
        for(int j=0;j<m;j++)            //a个数
        {
        //    printf("test1 ");
            flag=0;
            if(isb(a[j],b[i]))
            {
                flag=1;                //判断a中所有数字(j)是否有包含b中第i数字, 如果包含则置位flag 
                //printf("test2 ");
                break;
            }
        }
        if(flag==1)
        {
            index3=index2;
            index2=index2+2;                //如果flag为1, 则偏移2个位置
        }
        for(int j=0;j<m;j++)                //将所有 a中包含b中第i个数字的索引j,和数字a[j], 放入数组 
        {
            if(isb(a[j],b[i]))
            {    
                result[index2++]=j;         //最后将 数字b[i]和a中数字包含b[i]的个数,放入数组    
                result[index2++]=a[j];        //数组总共有几个数字 
            }
        }

        if(flag==1)
        {
            result[index3]=b[i];
            result[index3+1]=(index2-index3)/2-1;
            count_result=index2;
        }
    }
    printf("%d ",count_result);                //打印数组总共几个数字 
    for(int i=0;i<index2;i++)                //打印数组 
    {
        printf("%d ",result[i]);
    }
    printf("\n");
 }

}