#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const pair&p){ os< ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,pair&p){ is>>p.first>>p.second; return is; } template istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } //ret[i][j] : i以降の文字jが登場する最初のindex vector> fillnxt(string s){ int n=(int)s.size(); vector> ret(n+1,vector(26,INF)); for(int i=n-1;i>=0;i--){ rep(j,26) ret[i][j]=ret[i+1][j]; ret[i][s[i]-'a']=i; } return ret; } signed main(){ string s,t;cin>>s>>t; int n=(int)s.size(),m=(int)t.size(); auto ns=fillnxt(s); auto nt=fillnxt(t); // s[i~n)をt[j~m)で作れる // v[i]=j, 作れないなら-1 vector> pt(m+1,vector(26,-1)); rep(i,m+1){ if(i)rep(j,26)pt[i][j]=pt[i-1][j]; if(i v(n+1,-1); v[n]=m; for(int i=n-1;i>=0;i--){ if(v[i+1]>=0)v[i]=pt[v[i+1]][s[i]-'a']; } if(v[0]>=0){ cout<<-1<=nj)continue; res.push_back('a'+k); i=ni+1,j=nj+1; break; } } cout<<-1<