#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
struct Myans {
short count;
char direct;
};
using namespace std;
char arr[1000]="bdcaba";
char brr[1000]="abcbdab";
Myans ans[1001][1001];
int main() {
//scanf("%s", arr);
//scanf("%s", brr);
int arr_len = strlen(arr);
int brr_len = strlen(brr);
for (int i = 0; i <= 1001; i++) {
ans[i][0].count = -1;
ans[0][i].count = -1;
}
vector<char> chs;
chs.clear();
for (int ac = 0; ac < arr_len; ac++) {
for (int bc = 0; bc < brr_len; bc++) {
if (arr[ac] == brr[bc]) {
ans[ac + 1][bc + 1].count = ans[ac][bc].count + 1;
ans[ac + 1][bc + 1].direct = 'x';
}
else {
if (ans[ac + 1][bc].count >= ans[ac][bc + 1].count) {
ans[ac + 1][bc + 1].count = ans[ac+1][bc].count;
ans[ac + 1][bc + 1].direct = 'l';
}
else {
ans[ac + 1][bc + 1].count = ans[ac][bc+1].count;
ans[ac + 1][bc + 1].direct = 'u';
}
}
}
for (int i = 1; i < brr_len; i++) {
cout << ans[ac + 1][i].count << ','<< ans[ac + 1][i].direct<<' ';
}cout << endl;
}
cout << ans[arr_len][brr_len].count << endl;
int ac = arr_len;
int bc = brr_len;
while (ac > 0 && bc>0) {
if (ans[ac][bc].direct == 'x') {
cout << arr[ac - 1] << ' ';
bc--;
ac--;
}
else {
if (ans[ac][bc].direct == 'u') {
ac--;
}
else {
bc--;
}
}
}
}