#include #include #include #include using namespace std; typedef vector lol; typedef vector::iterator loli; lol a; lol b; lol bestResult(loli ia, loli ib) { lol r; if (ia == a.end()) { for (; ib != b.end(); ib++) { r.push_back((*ib)); } return r; } if (ib == b.end()) { for (; ia != a.end(); ia++) { r.push_back((*ia)); } return r; } size_t i = 0; while ( (*ia) == (*ib) ) { r.push_back((*ia)); ++ia; ++ib; if (ia == a.end()) break; if (ib == b.end()) break; } loli ia2 = ia; loli ib2 = ib; ia2++; ib2++; lol bR1 = bestResult(ia2, ib); lol bR2 = bestResult(ia, ib2); lol bA; bA.insert(bA.begin(), 1, (*ia)); bA.insert(bA.end(), bR1.begin(), bR1.end()); lol bB; bB.insert(bA.begin(), 1, (*ib)); bA.insert(bA.end(), bR2.begin(), bR2.end()); if (bA.size() < bB.size()) { r.insert( r.end(), bA.begin(), bA.end() ); } else if (bA.size() > bB.size()) { r.insert( r.end(), bB.begin(), bB.end() ); } else { if ((*bA.begin()) < (*bB.begin())) { r.insert( r.end(), bA.begin(), bA.end() ); } else { r.insert( r.end(), bB.begin(), bB.end() ); } } return r; } int main(int argc, char **argv) { while(true) { char w[11]; while (true) { scanf("%s ", w); if (w[0] == '.') break; a.push_back(string(w)); } if (a.empty()) return 0; while (true) { scanf("%s ", w); if (w[0] == '.') break; b.push_back(string(w)); } lol r = bestResult(a.begin(), b.begin()); loli ri = r.begin(); while (ri != r.end()) { cout << (*ri) << " "; ++ri; } cout << endl; } return 0; }