#include <bits/stdc++.h>
#define ll long long
#define st first
#define nd second
using namespace std;
set <string> v;
string s1,s2;
struct edge
{
    string s;
    ll pos1,pos2;
};
map <string,ll> _cnt;
const ll maxn=81;
ll n,m;
ll dp[maxn][maxn];
ll cnt=0;
vector <edge> danhsach[maxn];
int main()
{
    cin>>s1>>s2;
    s1=' '+s1;
    s2=' '+ s2;
    n=s1.size();
    m=s2.size();
    for (ll i=1;i<=n;i++)
    for (ll j=1;j<=m;j++){
        if (s1[i]==s2[j])
        {
            dp[i][j]=dp[i-1][j-1]+1;
            string _st="";
            _st+=s1[i];
            if (dp[i][j]==1)
            danhsach[dp[i][j]].push_back({_st,i,j});
            else
                for (edge it:danhsach[dp[i][j]-1])
            {
                string s=it.s;
                ll _i=it.pos1,_j=it.pos2;
                if (_i<i and _j<j)
                {
                    string _s=s+s1[i];
                    danhsach[dp[i][j]].push_back({_s,i,j});
                }
            }
        }
        else
            dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
        cnt=max(cnt,dp[i][j]);
    }
    for (edge it:danhsach[cnt])
    {
        v.insert(it.s);
    }
    cout<<v.size()<<'\n';
    for (ll i=danhsach[cnt].size()-1;i>=0;i--)
    {
        if (!_cnt[danhsach[cnt][i].s])
        {
        _cnt[danhsach[cnt][i].s]=1;
        cout<<danhsach[cnt][i].s<<'\n';
        }
    }
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgc3QgZmlyc3QKI2RlZmluZSBuZCBzZWNvbmQKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc2V0IDxzdHJpbmc+IHY7CnN0cmluZyBzMSxzMjsKc3RydWN0IGVkZ2UKewogICAgc3RyaW5nIHM7CiAgICBsbCBwb3MxLHBvczI7Cn07Cm1hcCA8c3RyaW5nLGxsPiBfY250Owpjb25zdCBsbCBtYXhuPTgxOwpsbCBuLG07CmxsIGRwW21heG5dW21heG5dOwpsbCBjbnQ9MDsKdmVjdG9yIDxlZGdlPiBkYW5oc2FjaFttYXhuXTsKaW50IG1haW4oKQp7CiAgICBjaW4+PnMxPj5zMjsKICAgIHMxPScgJytzMTsKICAgIHMyPScgJysgczI7CiAgICBuPXMxLnNpemUoKTsKICAgIG09czIuc2l6ZSgpOwogICAgZm9yIChsbCBpPTE7aTw9bjtpKyspCiAgICBmb3IgKGxsIGo9MTtqPD1tO2orKyl7CiAgICAgICAgaWYgKHMxW2ldPT1zMltqXSkKICAgICAgICB7CiAgICAgICAgICAgIGRwW2ldW2pdPWRwW2ktMV1bai0xXSsxOwogICAgICAgICAgICBzdHJpbmcgX3N0PSIiOwogICAgICAgICAgICBfc3QrPXMxW2ldOwogICAgICAgICAgICBpZiAoZHBbaV1bal09PTEpCiAgICAgICAgICAgIGRhbmhzYWNoW2RwW2ldW2pdXS5wdXNoX2JhY2soe19zdCxpLGp9KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZm9yIChlZGdlIGl0OmRhbmhzYWNoW2RwW2ldW2pdLTFdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJpbmcgcz1pdC5zOwogICAgICAgICAgICAgICAgbGwgX2k9aXQucG9zMSxfaj1pdC5wb3MyOwogICAgICAgICAgICAgICAgaWYgKF9pPGkgYW5kIF9qPGopCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIF9zPXMrczFbaV07CiAgICAgICAgICAgICAgICAgICAgZGFuaHNhY2hbZHBbaV1bal1dLnB1c2hfYmFjayh7X3MsaSxqfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBkcFtpXVtqXT1tYXgoZHBbaV1bai0xXSxkcFtpLTFdW2pdKTsKICAgICAgICBjbnQ9bWF4KGNudCxkcFtpXVtqXSk7CiAgICB9CiAgICBmb3IgKGVkZ2UgaXQ6ZGFuaHNhY2hbY250XSkKICAgIHsKICAgICAgICB2Lmluc2VydChpdC5zKTsKICAgIH0KICAgIGNvdXQ8PHYuc2l6ZSgpPDwnXG4nOwogICAgZm9yIChsbCBpPWRhbmhzYWNoW2NudF0uc2l6ZSgpLTE7aT49MDtpLS0pCiAgICB7CiAgICAgICAgaWYgKCFfY250W2RhbmhzYWNoW2NudF1baV0uc10pCiAgICAgICAgewogICAgICAgIF9jbnRbZGFuaHNhY2hbY250XVtpXS5zXT0xOwogICAgICAgIGNvdXQ8PGRhbmhzYWNoW2NudF1baV0uczw8J1xuJzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=