package main import ( "bufio" "fmt" "sort" "strings" "os" ) func main() { var n int fmt.Scanf("%d", &n) scanner := bufio.NewScanner(os.Stdin) scanner.Scan() line := scanner.Text() a := strings.Split(line, " ") scanner.Scan() line = scanner.Text() b_ := strings.Split(line, " ") b_ = b_[1:] // 跳过m // 去重 var mp = make(map[string]bool) for i:=0;i<len(b_);i++{ mp[b_[i]] = true } var b = make([]string, len(mp)) var i int =0 for v, _ := range mp { b[i] = v i++ } // 排序 sort.Slice(b, func(i, j int) bool{ if len(b[i]) == len(b[j]){ return b[i] < b[j] } return len(b[i]) < len(b[j]) }) type Node struct{ index int v string } var result = make([][]Node, len(b)) for i=0;i<len(a);i++{ for j:=0;j<len(b);j++{ if strings.Contains(a[i], b[j]) { result[j] = append(result[j], Node{i, a[i]}) } } } var num int for i:=0;i<len(result);i++{ if len(result[i]) > 0{ num+= 2+2*len(result[i]) } } fmt.Print(num," ") for i:=0;i<len(result);i++{ if len(result[i]) > 0{ fmt.Print(b[i]," ",len(result[i])," ") for j:=0;j<len(result[i]);j++{ fmt.Print(result[i][j].index," ", result[i][j].v," ") } } } }