#include <bits/stdc++.h>

using namespace std;


void LCS(string, string);
void printlcs(int, int, int[][200], string, string);
int main()
{
	string INPUTA, INPUTB;
	cin >> INPUTA >> INPUTB;
	LCS(INPUTA, INPUTB);
	return 0;
}


void LCS(string a, string b)
{
	int sizea, sizeb;
	sizea = a.size();
	sizeb = b.size();
	string tmpa = "0";
	a = tmpa + a;
	
	string tmpb = "1";
	b = tmpb + b;
	
	int table[200][200];
	int pre[200][200];
	for (int i = 0; i <= sizea; i++)
		table[i][0];
	for (int j = 0; j <= sizeb; j++)
		table[0][j];

	for (int i = 1; i <= sizea; i++)
	{
		for (int j = 1; j <= sizeb; j++)
		{
			if (a[i] == b[j])
			{
				table[i][j] = table[i - 1][j - 1] + 1;			
				pre[i][j] = 0;
			}
			else
			{
				if (table[i - 1][j] > table[i][j - 1])
				{
					table[i][j] = table[i - 1][j];		
					pre[i][j] = 1;
				}
				else if (table[i - 1][j]< table[i][j - 1])
				{
					table[i][j] = table[i][j - 1];				
					pre[i][j] = 2;
				}
				else
				{
					table[i][j] = table[i][j - 1];
					pre[i][j] = 3;

				}
			}

		}

	}
	cout << table[sizea][sizeb] << endl;
	printlcs(sizea, sizeb, pre, a, "");
}




void printlcs(int i, int j, int pre[][200], string a, string ans)
{

	if (i == 0 || j == 0) {
		cout << ans << endl;
		return;
	}

	if (pre[i][j] == 0)
	{
		ans.push_back(a[i]);
		printlcs(i - 1, j - 1, pre, a, ans);
	}
	else if (pre[i][j] == 1)
		printlcs(i - 1, j, pre, a, ans);
	else if (pre[i][j] == 2)
		printlcs(i, j - 1, pre, a, ans);
	else if (pre[i][j] == 3) {
		printlcs(i - 1, j, pre, a, ans);
		printlcs(i, j - 1, pre, a, ans);
	}

}
	