#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> b;
vector<string> res;
void sol(string x,string y) {
int l1=x.size();
int l2=y.size();
vector<vector<int>> bag(l1+1,vector<int> (l2+1,0));
for(int i=1;i<=l1;i+=1) {
for(int j=1;j<=l2;j+=1) {
if(x[i-1]==y[j-1]) bag[i][j]=bag[i-1][j-1]+1;
else bag[i][j]=max(bag[i-1][j],bag[i][j-1]);
}
}
b=bag;
for(int i=0;i<=l1;i+=1) {
for(int j=0;j<=l2;j+=1) {
cout<<bag[i][j]<<' ';
}
cout<<endl;
}
cout<<bag[l1][l2]<<endl;
int a=l1;
int b=l2;
string res="";
while(a>0&&b>0) {
if(x[a-1]==y[b-1]) {
res+=x[a-1];
a-=1;
b-=1;
}
else {
if(bag[a-1][b]>bag[a][b-1]) {
a-=1;
}
else b-=1;
}
}
cout<<res<<endl;
}
void count(int i,int j,string s,string x,string y) {
while(i>0&&j>0) {
if(x[i-1]==y[j-1]) {
s+=x[i-1];
i-=1;
j-=1;
}
else {
if(b[i-1][j]>b[i][j-1]) i-=1;
else if(b[i-1][j]<b[i][j-1]) j-=1;
else {
count(i-1,j,s,x,y);
count(i,j-1,s,x,y);
return;
}
}
}
res.push_back(s);
}
int main() {
string s1="357486782";
string s2="13456778";
sol(s1,s2);
string temp;
count(s1.size()+1,s2.size()+1,temp,s1,s2);
cout<<res.size()<<endl;
for(int i=0;i<res.size();i+=1) cout<<res[i]<<endl;
return 0;
}