690 {
691 int n;
692 cin >> n;
693 auto records = map<string, trie_node *>();
694 for(int i = 0; i < n; i++) {
695 string name;
696 cin >> name;
697 if(!records.contains(name)) {
698
699 records[name] = new trie_node(-1, nullptr);
700 }
701 int n2;
702 cin >> n2;
703 for(int j = 0; j < n2; j++) {
704 string phone_number;
705 cin >> phone_number;
706 string phone_number_trim_left;
707 for(int k = 0; k < phone_number.length(); k++) {
708 if(phone_number[k] != '0') {
709 phone_number_trim_left = phone_number.substr(k);
710 break;
711 }
712 }
713 reverse(phone_number_trim_left.begin(), phone_number_trim_left.end());
714 records[name]->insert(phone_number_trim_left);
715 }
716 }
717 cout << records.size();
718 for(auto it: records) {
719 cout << it.first << " ";
720 cout << it.second->count() << " ";
721 it.second->display();
722 }
723 return 0;
724 }
void reverse(struct ListNode *head)