#include #include #include using namespace std; size_t my_merge( const vector & vect1, const vector & vect2, size_t i1, size_t i2, vector & result){ size_t diff1, diff2, len1 = vect1.size(), len2 = vect2.size(); while(i1 < len1 && i2 < len2){ if(vect1[i1] == vect2[i2]){ //cout << vect1[ i1 ] << " "; result.push_back( vect1[ i1 ] ); i1++; i2++; continue; } diff1 = 0; diff2 = 0; while((i1 + diff1) < len1 && vect2[i2] != vect1[ i1 + diff1 ]){ diff1++; } while((i2 + diff2) < len2 && vect1[i1] != vect2[ i2 + diff2 ]){ diff2++; } //cout << " '" << diff1 << "," << diff2 <<"' "; if((i1 + diff1) == len1 && (i2 + diff2) == len2){ if(vect1[i1] < vect2[i2]) //cout<< vect1[ i1++ ] << " "; result.push_back( vect1[ i1++ ] ); else //cout<< vect2[ i2++ ] << " "; result.push_back( vect2[ i2++ ] ); continue; } if((i1 + diff1) == len1){ while(diff2--){ //cout << vect2[ i2++ ] << " "; result.push_back( vect2[ i2++ ] ); } //cout << vect2[ i2++ ] << " "; result.push_back( vect2[ i2++ ] ); i1++; continue; } if((i2 + diff2) == len2){ while(diff1--){ //cout << vect1[ i1++ ] << " "; result.push_back( vect1[ i1++ ] ); } //cout << vect1[ i1++ ] << " "; result.push_back( vect1[ i1++ ] ); i2++; continue; } vector result1; size_t i11; while(diff1--){ result.push_back( vect1[ i11++ ] ); } result.push_back( vect1[ i11++ ] ); i11++; size_t ret1 = my_merge(vect1, vect2, i11, i2, result1); vector result2; size_t i21; while(diff2--){ result.push_back( vect2[ i21++ ] ); } result.push_back( vect2[ i21++ ] ); i21++; size_t ret2 = my_merge(vect1, vect2, i1, i21, result2); if(ret1 < ret2){ for(vector::iterator it = result1.begin(); it != result1.end(); it++) result.push_back(*it); return result.size(); }else{ for(vector::iterator it = result2.begin(); it != result2.end(); it++) result.push_back(*it); return result.size(); } } while(i1 < len1){ //cout << vect1[ i1++ ] << " "; result.push_back( vect1[ i1++ ] ); } while(i2 < len2){ //cout << vect2[ i2++ ] << " "; result.push_back( vect2[ i2++ ] ); } //cout << ".\n"; return 1; } int main(){ string str; vector vect1, vect2; while(1){ vect1.clear(); vect2.clear(); cin >> str; if(str == "."){ return 0; } while(str != "."){ vect1.push_back(str); cin >> str; } cin >> str; while(str != "."){ vect2.push_back(str); cin >> str; } vector result; result.clear(); my_merge(vect1, vect2, 0, 0, result); for(vector::iterator it = result.begin(); it != result.end(); it++) cout << (*it) << " "; cout << ".\n"; } return 0; }