#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define num 10000

struct have{
    int locat[num];
    int all_n;
};

int get_sn(int l,int s){
    int i,j,len_l=1,len_s=1,tl,ts,n=0,temp=1;
    tl=l;
    ts=s;
    while((tl/=10)) len_l++;
    while((ts/=10)) len_s++;
    for(i=0;i<len_s;i++) temp*=10;
    
    if(len_l<len_s) return 0;
    
    
    for(i=0;i<len_l-len_s+1;i++){
        if(((len_l-i)==len_s)&&(l==s)) return 1;
        else if(((len_l-i)==len_s)&&(l!=s)) return 0;
        if(l%(l/temp*temp)==s) return 1;
        l/=10;
    }
    return 0;
}

void get_list(struct have *list,int *l,int *s,int l_n,int s_n){
    int i,j;
    for(i=0;i<s_n;i++){
        list[i].all_n=0;
        for(j=0;j<l_n;j++){
            if(get_sn(l[j],s[i])){
                list[i].locat[list[i].all_n]=j;
                list[i].all_n++;

            }
        }
    }
}

int main(void) { 
    int l[num],s[num],l_n,s_n,all_n,i,j,temp,tot_n=0;

	while(scanf("%d",&l_n)!=-1){
	for(i=0;i<l_n;i++) scanf("%d",l+i);
	scanf("%d",&s_n);
	for(i=0;i<s_n;i++) scanf("%d",s+i);
	

	for(i=0;i<s_n-1;i++){
	    for(j=0;j<s_n-1-i;j++){
	        if(s[j]>s[j+1]){
	            temp=s[j];
	            s[j]=s[j+1];
	            s[j+1]=temp;
	        } 
	    }
	}
	
	j=0;
	for(i=0;i<s_n;i++){
	    s[j]=s[i];
	    if(s[i]!=s[i+1]) j++;
	}

	s_n=j;
	
	
	struct have list[s_n];
	get_list(list,l,s,l_n,s_n);
	tot_n=0;
	for(i=0;i<s_n;i++){
	    if(list[i].all_n!=0) tot_n+=list[i].all_n*2+2;
	}
	printf("%d ",tot_n);
	
	for(i=0;i<s_n;i++){
	    if(list[i].all_n!=0) {
	        printf("%d %d ",s[i],list[i].all_n);
	        for(j=0;j<list[i].all_n;j++) printf("%d %d ",list[i].locat[j],l[list[i].locat[j]]);
	    }
	}
	printf("\n");
	}
	return 0;
}