#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define eps 1e-2
#define gcd __gcd
#define pb push_back
#define PI acos(-1.0)
#define lowbit(x) (x)&(-x)
#define bug printf("!!!!!\n");
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef unsigned long long uLL;
#define int long long
const int maxn = 1e5+2;
const int INF = 1<<30;
const int mod = 1e9+7;
string s,t;
int pl[maxn],pr[maxn];
bool check(int mid,int x){
int L=x,R=mid,val1=(L==0?-1:pl[L-1]),val2=((R==t.size()-1)?1e9:pr[R+1]);
return val1<val2;
}
void solve(){
memset(pl,0x3f,sizeof pl);
memset(pr,-0x3f,sizeof pr);
cin>>s>>t;
int pos1=0,pos2=0,len1=s.size(),len2=t.size();
while(pos1<len1&&pos2<len2){
if(s[pos1]==t[pos2]){
pl[pos2]=pos1;
++pos1;++pos2;
}else{
++pos1;
}
}
if(pos2==len2){
cout<<t<<endl;
return;
}
pos1=s.size()-1;pos2=t.size()-1;
while(pos1>=0&&pos2>=0){
if(s[pos1]==t[pos2]){
pr[pos2]=pos1;
--pos1;--pos2;
}else{
--pos1;
}
}
int ans=1e9,pos;
for(int i=0;i<t.size();i++){
int l=i,r=t.size()-1;
while(l<r){
int mid=(l+r)>>1;
if(check(mid,i)) r=mid;
else l=mid+1;
}
if(check(l,i)){
if(ans>l-i+1){
ans=l-i+1;
pos=i;
}
}
}
if(ans==len2){
cout<<"-"<<endl;
return;
}
string res;
for(int i=0;i<pos;i++) res+=t[i];
for(int i=pos+ans;i<t.size();i++) res+=t[i];
cout<<res<<endl;
return;
}
int32_t main()
{
int t = 1;
while(t--){
solve();
}
return 0;
}