#include #include #include #include #include using namespace std; int n; char str[1000 * 1000 + 10]; int m; char key[60]; int key_map[256]; int ans_len; vector > ans; void Solve() { ans_len = -1; ans.clear(); int count[60]; memset(count, -1, sizeof(count)); for(int i = n-1; i >= 0; --i) { int j = key_map[str[i]]; if(j >= 0) count[j] = 0; int M = 0; bool disable = false; for(int j = 0; j < m; ++j) { if(count[j] >= 0) M = max(++count[j], M); else disable = true; //cout << count[j]; } //cout << endl; if(!disable) { if(ans_len < 0 || M < ans_len) { ans.clear(); ans_len = M; ans.push_back(make_pair(i, M)); } else if(M == ans_len) { ans.push_back(make_pair(i, M)); } } } } int main() { while(true) { char* p = str; for(char line[100]; cin.getline(line, 100); ) { int t = strlen(line); if(t == 0 && p == str) continue; if(t == 0) break; strcpy(p, line); p += t; } if(!cin) break; while(cin.getline(key, 60)) if(key[0]) break; m = strlen(key); memset(key_map, -1, sizeof(key_map)); for(int i = 0; i < m; ++i) key_map[key[i]] = i; n = p - str; Solve(); int k = ans.size(); if(k) { cout << k << endl << endl; string s(str + ans[k-1].first, ans[k-1].second); for(int i = 0; i < (int)(s.size() / 72); ++i) cout << s.substr(i*72, 72) << endl; if(s.size() % 72 != 0) cout << s.substr((s.size() / 72)*72) << endl; } else { cout << 0 << endl; } cout << endl; cin.getline(str, sizeof(str)); } }