#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
// #ifndef ONLINE_JUIDE
// freopen(“input.txt”,“r”,stdin);
// freopen(“output.txt”,“w”,stdout);
// #endif
unordered_map<char, int> map1;
unordered_map<char,int> map2;
char str1[10005];
char str2[10005];
gets(str1);
gets(str2);
//cout<<str1<<endl<<str2<<endl;
for(int i=0;str2[i]!=’\0’;i++){
// cout<<“i am inside”;
map2[str2[i]]++;
}
ll i=-1;
ll j=-1;
ll count=0;
ll length=INT_MAX;
ll start=-1;
// cout<<count<<endl;
// ll inside=0;
while(true){
bool flag1=false;
bool flag2=false;
//cout<<str1.length()<<endl;
while(i<(strlen(str1))-1){
//cout<< inside<<endl;
flag1=true;
i++;
map1[str1[i]]++;
if(map1[str1[i]]<=map2[str1[i]]){
count++;
}
if(count==strlen(str2)){
break;
}
//cout<<i<<endl;
//inside++;
}
//cout<<i<<" this is i";
while(j<i&&count==strlen(str2)){
flag2=true;
ll curr_len=i-j;
if(curr_len<length){
start=j;
length=curr_len;
}
j++;
if(map1[str1[j]]==1){
map1.erase(str1[j]);
}
else{
map1[str1[j]]–;
}
if(map1[str1[j]]<map2[str1[j]]){
count–;
break;
}
}
if(flag1==false&&flag2==false){
break;
}
}
//cout<<endl;
//cout<<start<<"this is "<<length<<endl;
for(ll i=start+1;i<=(start+length);i++){
cout<<str1[i];
}
}