代码比较多,基本解法;首先把输入的两个字符串按空格分开转化为列表;然后分别取第一个元素表示个数,再对R列表去重和排序(排序前还要把R中的字符串元素转化为整数);需要找出要输出的数字个数(除第一个),我把它分为两类;第一类是:元素,该元素出现的次数;第二类是:该元素出现的每一次位置信息,该位置处的值;因为对于R中的元素未必是I中某元素的子串,因此要过滤出有效的数字;假设R中有a个有效元素,R中所有元素总出现次数为b,则要输出的数字个数(除第一个)为(a+b)*2;因为输出格式是<元素,出现次数>,<出现位置,该位置元素>。注释很清楚,如下:

while True:
    try:
        I=input().split()#按空格分成列表
        R=input().split()
        m=int(I.pop(0))#取第一个元素作为个数
        n=int(R.pop(0))
        for i in range(n):#字符串->整数,为了后面的排序
            R[i]=int(R[i])
        R=set(R)#去重
        R=sorted(R)#排序
        count=0#记录R中的元素在I中出现的总次数
        num=0#记录R中有几个元素是I中元素的子串
        flag0=False#标识位,标识当前R中元素是否是I中某元素的子串
        for i in R:
            for j in I:
                if str(i) in j:
                    flag0=True#说明该元素至少是I中一个元素的子串
                    count+=1
            if flag0:
                num+=1
                flag0=False#每次循环结束置为false,为了下一个元素的判断
        count=(count+num)*2#要输出的第一个数,表示后面元素的个数
        #输出时,因为有位置信息所以count*2,又要输出元素和总次数
        #因此num*2
        print(count,end='')#按格式输出,以‘’结尾,下次输出紧跟着
        for i in R:
            num=0
            for j in I:
                if str(i) not in j:
                    continue
                flag0=True#说明该元素至少是I中一个元素的子串,有效
                num+=1#num记录当前元素是几个元素的子串
            if not flag0:#如果该元素无效,跳过
                continue
            print(' '+str(i)+' '+str(num),end='')#按格式
            for index,j in enumerate(I):
                if str(i) in j:
                    print(' '+str(index)+' '+j,end='')
            flag0=False#同样置false,为了下个元素的判断
        print()#这是为了换行,不然会过不了测试
    except:
        break