#include using namespace std; string ltrim(const string &); string rtrim(const string &); /* * Complete the 'morganAndString' function below. * * The function is expected to return a STRING. * The function accepts following parameters: * 1. STRING a * 2. STRING b */ string morganAndString(string a, string b) { string result; result.reserve(a.size() + b.size() + 1); for(auto i = 0, j = 0; i < a.size() || j < b.size(); ) { auto k = i, l = j; while(k < a.size() && l < b.size() && a[k] == b[l]) { k++; l++; } if(k == a.size()) { for(l = j; j < b.size() && b[j] == b[l]; j++) { result.push_back(b[j]); } } else if(l == b.size()) { for(k = i; i < a.size() && a[i] == a[k]; i++) { result.push_back(a[i]); } } else if(a[k] < b[l]) { for(k = i; i < a.size() && a[i] == a[k]; i++) { result.push_back(a[i]); } } else { for(l = j; j < b.size() && b[j] == b[l]; j++) { result.push_back(b[j]); } } } return result; } int main() { ofstream fout(getenv("OUTPUT_PATH")); string t_temp; getline(cin, t_temp); int t = stoi(ltrim(rtrim(t_temp))); for (int t_itr = 0; t_itr < t; t_itr++) { string a; getline(cin, a); string b; getline(cin, b); string result = morganAndString(a, b); fout << result << "\n"; } fout.close(); return 0; } string ltrim(const string &str) { string s(str); s.erase( s.begin(), find_if(s.begin(), s.end(), not1(ptr_fun(isspace))) ); return s; } string rtrim(const string &str) { string s(str); s.erase( find_if(s.rbegin(), s.rend(), not1(ptr_fun(isspace))).base(), s.end() ); return s; }