#include #include #include using namespace std; vector vc, tmpa, tmpb; bool nactiVstup(vector* a, vector* b) { string tmp; cin >> tmp; if (tmp == ".") return false; while (tmp != ".") { a->push_back(tmp); cin >> tmp; } cin >> tmp; while (tmp != ".") { b->push_back(tmp); cin >> tmp; } return true; } void vypisVystup(vector* v) { for(vector::iterator it = v->begin(); it < v->end(); it++) cout << *it << " "; cout << "." << endl; } void emptyTmp() { vector::iterator it; while (!tmpa.empty() && !tmpb.empty()) { if (tmpa.front() < tmpb.front()) { vc.push_back(tmpa.front()); tmpa.erase(tmpa.begin()); } else { vc.push_back(tmpb.front()); tmpb.erase(tmpb.begin()); } } for (it = tmpa.begin(); it < tmpa.end(); it++) vc.push_back(*it); tmpa.clear(); for (it = tmpb.begin(); it < tmpb.end(); it++) vc.push_back(*it); tmpb.clear(); } int main() { vector va, vb; vector::iterator it; string a, b, tmp; int da, db, x; while (nactiVstup(&va, &vb)) { vc.clear(); tmpa.clear(); tmpb.clear(); while (!va.empty() && !vb.empty()) { a = va.front(); va.erase(va.begin()); b = vb.front(); vb.erase(vb.begin()); if (a == b) { emptyTmp(); vc.push_back(a); } else { da = 0; db = 0; x = 1; for (it = va.begin(); it < va.end(); it++, x++) if (*it == b) { da = x; break; } x = 1; for (it = vb.begin(); it < vb.end(); it++, x++) if (*it == a) { db = x; break; } if ((da != 0) && (db != 0)) if (da < db) db = 0; else da = 0; if ((da != 0) || (db != 0)) emptyTmp(); if ((da == 0) && (db == 0)) { tmpa.push_back(a); tmpb.push_back(b); } else if (da == 0) { vc.push_back(b); for (int i = 0; i < db; i++) { tmp = vb.front(); vb.erase(vb.begin()); vc.push_back(tmp); } } else if (db == 0) { vc.push_back(a); for (int i = 0; i < da; i++) { tmp = va.front(); va.erase(va.begin()); vc.push_back(tmp); } } } } // dopsat zbytek tmpa a tmpb emptyTmp(); // dopsat zbytek a|b for (it = va.begin(); it < va.end(); it++) vc.push_back(*it); va.clear(); for (it = vb.begin(); it < vb.end(); it++) vc.push_back(*it); vb.clear(); // vypsat vysledek vypisVystup(&vc); } return 0; }