首先用c数组储存a数组,再将a,b两个数组排序,判断b数组中是否有子序列为a数组,若没有输出impossi。
若满足条件,创建一个字符串类型的vector,将b数组中除了a数组的子序列每一个字母作为字符串写入vector容器,再将之前保存的c数组写入vector,使用sort函数进行字典序排序,最后输出vector即可
#include<bits/stdc++.h>
using namespace std;
inline bool cmp( const string &s1, const string &s2 ) {
    return s1+s2 < s2+s1;
}
int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    
    int t,i,j;
    bool p;
    char a[100001],b[100001],c[100001];
    cin>>t;
    while(t--){
        p= false;
        cin>>a>>b;
        if(strlen(a)> strlen(b)){
            cout<<"impossible"<<endl;
            continue;
        }
        for(i=0;i< strlen(b);i++){
            c[i]=a[i];
        }
        sort(a,a+ strlen(a));
        sort(b, b+strlen(b));
        j=0;
        for(i=0;i< strlen(b);i++){
            if(a[j]==b[i]){
                b[i]='+';
                j++;
            }
            if(j== strlen(a)){
                p=true;
                break;
            }
        }
        if(p){
            string s;
            vector<string> v;
            for(i=0;i< strlen(b);i++){
                if (b[i] != '+') {
                    s = b[i];
                    v.push_back(s);
                }
            }
                s = c;
                v.push_back(s);
                sort(v.begin(), v.end(), cmp);
                for (auto k: v)
                    cout << k;
                cout << endl;
            
        }else{
            cout<<"impossible"<<endl;
        }
    }
    return 0;
}