#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string a, b;
cin >> a >> b;
int n = a.size(), m = b.size();
// Step 1: DP for length
vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
for (int i = n-1; i >= 0; i--) {
for (int j = m-1; j >= 0; j--) {
if (a[i] == b[j]) dp[i][j] = 1 + dp[i+1][j+1];
else dp[i][j] = max(dp[i+1][j], dp[i][j+1]);
}
}
// Step 2: next occurrence table (0..9)
const int DIG = 10;
vector<vector<int>> nextA(n+2, vector<int>(DIG, n));
vector<vector<int>> nextB(m+2, vector<int>(DIG, m));
for (int d = 0; d < DIG; d++) {
nextA[n][d] = nextA[n+1][d] = n;
nextB[m][d] = nextB[m+1][d] = m;
}
for (int i = n-1; i >= 0; i--) {
nextA[i] = nextA[i+1];
nextA[i][a[i]-'0'] = i;
}
for (int j = m-1; j >= 0; j--) {
nextB[j] = nextB[j+1];
nextB[j][b[j]-'0'] = j;
}
// Step 3: Build lexicographically largest LCS
string res;
int i = 0, j = 0, len = dp[0][0];
while (len > 0) {
for (int d = 9; d >= 0; d--) { // từ '9' về '0'
int ni = nextA[i][d];
int nj = nextB[j][d];
if (ni < n && nj < m && dp[ni][nj] == len) {
res.push_back('0' + d);
i = ni + 1;
j = nj + 1;
len--;
break;
}
}
}
cout << res << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgc3RyaW5nIGEsIGI7CiAgICBjaW4gPj4gYSA+PiBiOwogICAgaW50IG4gPSBhLnNpemUoKSwgbSA9IGIuc2l6ZSgpOwoKICAgIC8vIFN0ZXAgMTogRFAgZm9yIGxlbmd0aAogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkcChuKzEsIHZlY3RvcjxpbnQ+KG0rMSwgMCkpOwogICAgZm9yIChpbnQgaSA9IG4tMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBmb3IgKGludCBqID0gbS0xOyBqID49IDA7IGotLSkgewogICAgICAgICAgICBpZiAoYVtpXSA9PSBiW2pdKSBkcFtpXVtqXSA9IDEgKyBkcFtpKzFdW2orMV07CiAgICAgICAgICAgIGVsc2UgZHBbaV1bal0gPSBtYXgoZHBbaSsxXVtqXSwgZHBbaV1baisxXSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIFN0ZXAgMjogbmV4dCBvY2N1cnJlbmNlIHRhYmxlICgwLi45KQogICAgY29uc3QgaW50IERJRyA9IDEwOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBuZXh0QShuKzIsIHZlY3RvcjxpbnQ+KERJRywgbikpOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBuZXh0QihtKzIsIHZlY3RvcjxpbnQ+KERJRywgbSkpOwogICAgZm9yIChpbnQgZCA9IDA7IGQgPCBESUc7IGQrKykgewogICAgICAgIG5leHRBW25dW2RdID0gbmV4dEFbbisxXVtkXSA9IG47CiAgICAgICAgbmV4dEJbbV1bZF0gPSBuZXh0QlttKzFdW2RdID0gbTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBuLTE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgbmV4dEFbaV0gPSBuZXh0QVtpKzFdOwogICAgICAgIG5leHRBW2ldW2FbaV0tJzAnXSA9IGk7CiAgICB9CiAgICBmb3IgKGludCBqID0gbS0xOyBqID49IDA7IGotLSkgewogICAgICAgIG5leHRCW2pdID0gbmV4dEJbaisxXTsKICAgICAgICBuZXh0QltqXVtiW2pdLScwJ10gPSBqOwogICAgfQoKICAgIC8vIFN0ZXAgMzogQnVpbGQgbGV4aWNvZ3JhcGhpY2FsbHkgbGFyZ2VzdCBMQ1MKICAgIHN0cmluZyByZXM7CiAgICBpbnQgaSA9IDAsIGogPSAwLCBsZW4gPSBkcFswXVswXTsKICAgIHdoaWxlIChsZW4gPiAwKSB7CiAgICAgICAgZm9yIChpbnQgZCA9IDk7IGQgPj0gMDsgZC0tKSB7IC8vIHThu6sgJzknIHbhu4EgJzAnCiAgICAgICAgICAgIGludCBuaSA9IG5leHRBW2ldW2RdOwogICAgICAgICAgICBpbnQgbmogPSBuZXh0QltqXVtkXTsKICAgICAgICAgICAgaWYgKG5pIDwgbiAmJiBuaiA8IG0gJiYgZHBbbmldW25qXSA9PSBsZW4pIHsKICAgICAgICAgICAgICAgIHJlcy5wdXNoX2JhY2soJzAnICsgZCk7CiAgICAgICAgICAgICAgICBpID0gbmkgKyAxOwogICAgICAgICAgICAgICAgaiA9IG5qICsgMTsKICAgICAgICAgICAgICAgIGxlbi0tOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCByZXMgPDwgIlxuIjsKfQo=