#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
//英语 看博友分析 抄博友程序 输出最长公共子序列 dfs 没掌握
int f[1008][1008];
int g[1008][40];
int h[1008][40];
vector<string> ve;
int tot; string ans[1008];
void dfs(int x,int y,int l,string s)//抄博友程序
{
//cout<<x<<" "<<y<<" "<<l<<" "<<s<<endl;
if(l==0)
{
ve.push_back(s);
return;
//ans[++tot] = s;
//return;
}
if(x==0 || y==0)
{
return;
}
for(int i=0;i<26;i++)
{
int tx=g[x][i];
int ty=h[y][i];
if(f[tx][ty]==l)//抄博友程序
{
//s=(char)(i+'a')+s;//wa
dfs(tx-1,ty-1,l-1,(char)(i+'a')+s);//抄博友程序 tx-1 ty-1 没掌握
}
}
}
/*
int main() {
int l1, l2;
string s1, s2;
cin >> s1 >> s2;
l1 = s1.size();
l2 = s2.size();
s1 = ' ' + s1;
s2 = ' ' + s2;
for (int i = 1; i <= l1; i++) {
for (int j= 1; j <= l2; j++) {
if (s1[i] == s2[j]) f[i][j] = f[i - 1][j - 1] + 1;
else f[i][j] = max(f[i - 1][j], f[i][j - 1]);
}
}
for (int i = 1; i <= l1; i++) {
for (int j = 1; j <= 26; j++) {
if (s1[i] == j + 'a' - 1) g[i][j] = i;
else g[i][j] = g[i - 1][j];
}
}
for (int i = 1; i <= l2; i++) {
for (int j = 1; j <= 26; j++) {
if (s2[i] == j + 'a' - 1) h[i][j] = i;
else h[i][j] = h[i - 1][j];
}
}
dfs(l1, l2, f[l1][l2], "");
sort(ans + 1, ans + tot + 1);
for (int i = 1; i <= tot; i++)
cout << ans[i] << endl;
return 0;
}*/
int main()
{
char sa[1008],sb[1008];
scanf("%s%s",sa+1,sb+1);
int al=strlen(sa+1);
int bl=strlen(sb+1);
for(int i=1;i<=al;i++)
{
for(int j=1;j<=bl;j++)
{
if(sa[i]==sb[j])
{
f[i][j]=f[i-1][j-1]+1;//抄博友程序
}else
{
f[i][j]=max(f[i][j-1],f[i-1][j]);
}
}
}
/*
for(int i=1;i<=al;i++)
{
for(int j=1;j<=bl;j++)
{
cout<<f[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;*/
for(int i=1;i<=al;i++)
{
for(int j=0;j<26;j++)
{
if(sa[i]=='a'+j)
{
g[i][j]=i;//抄博友程序
}else
{
g[i][j]=g[i-1][j];
}
}
}
/*
for(int i=1;i<=al;i++)
{
for(int j=0;j<26;j++)
{
cout<<g[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;*/
for(int i=1;i<=bl;i++)//
{
for(int j=0;j<26;j++)
{
if(sb[i]=='a'+j)
{
h[i][j]=i;
}else
{
h[i][j]=h[i-1][j];
}
}
}
/*
for(int i=1;i<=bl;i++)
{
for(int j=0;j<26;j++)
{
cout<<h[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;*/
dfs(al,bl,f[al][bl],"");
sort(ve.begin(),ve.end());
for(int i=0;i<ve.size();i++)
{
cout<<ve[i]<<endl;
}
return 0;
}