#include <bits/stdc++.h>
using namespace std;
vector<string>sol;
set<string>seen;
void solve(vector<vector<int>>&dp,string t,string p,string cur,int i,int j){
    if(i==0 ||j==0){
        reverse(cur.begin(),cur.end());
        if(!seen.count(cur)){
            sol.push_back(cur);
            seen.insert(cur);
            return;
        }
    }
    if(t[i]==p[j]){
        cur.push_back(t[i-1]);
        solve(dp,t,p,cur,i-1,j-1);
    }
    else{
        if(dp[i-1][j]==dp[i][j-1]){
            solve(dp,t,p,cur,i-1,j);
            solve(dp,t,p,cur,i,j-1);
        }
        else if(dp[i-1][j]>dp[i][j-1]){
            solve(dp,t,p,cur,i-1,j);
        }
        else{
            solve(dp,t,p,cur,i,j-1);
        }
    }
}
int main() {
string t,p;
getline(cin,t);
getline(cin,p);
int n=t.length();
int m=p.length();
vector<vector<int>>dp(n+1,vector<int>(m+1,0));
for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        if(t[i-1]==p[j-1]){
            dp[i][j]=1+dp[i-1][j-1];
        }
        else{
            dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
    }
}
solve(dp,t,p,"",n,m);
sort(sol.begin(),sol.end());
for(string i:sol){
    cout<<i<<" ";
}
// for(int i=0;i<sol.size();i++){
//     cout<<sol[i]<<" ";
    // for(int j=0;j<n;j++){
    //     cout<<dp[i][j]<<" ";
    // }cout<<endl;
}
}