#include #include #include using namespace std; bool is_in_vector(vector & v, string ret, int pos) { int i; for(i = pos; i < v.size(); i++) { if(ret == v[i]) { return true; } } return false; } int main() { vector veta1; vector veta2; vector vystup; // ps na konci cyklu ocistit vektory! string ret;// pomocny retezec while((cin>>ret) && ret != ".") { veta1.push_back(ret); while((cin>>ret) && ret != ".") { veta1.push_back(ret); } ret = ""; while((cin>>ret) && ret != ".") { veta2.push_back(ret); } ret = ""; int i=0, j=0; // i k veta1, j k veta2 while(true) // i <= veta1.size()-1 && j <= veta2.size()-1 { if(j == veta2.size()) { int x; for(x = i; x < veta1.size(); x++) { vystup.push_back(veta1[x]); } break; } if(i == veta1.size()) { int x; for(x = j; x < veta2.size(); x++) { vystup.push_back(veta2[x]); } break; } if((veta1[i]) < (veta2[j])) // druhy > prvni { if(!is_in_vector(veta2, veta1[i],j)) { vystup.push_back(veta1[i]); if(veta2[j].find(veta1[i]) == 0) { vystup.push_back(veta2[j]); j++; } i++; } else { vystup.push_back(veta2[j]); j++; } continue; } else if((veta1[i]) > (veta2[j])) // prvni > druhy { if(!is_in_vector(veta1, veta2[j], i)) { vystup.push_back(veta2[j]); if(veta1[i].find(veta2[j]) == 0) { vystup.push_back(veta1[i]); i++; } j++; } else { vystup.push_back(veta1[i]); i++; } continue; } else // == { vystup.push_back(veta2[j++]); i++; } } for(i = 0; i < vystup.size(); i++) { cout << vystup[i] << " "; } cout << "." << endl; veta1.clear(); veta2.clear(); vystup.clear(); } return 0; }