import std.stdio;
import std.algorithm;
import std.array;
import std.conv;
import std.datetime;
import std.numeric;
import std.math;
import std.string;

string my_readln() { return chomp(readln()); }

void main()
{//try{
	//auto tokens = split(my_readln());
	//auto N = to!ulong(tokens[0]);
	//auto W = to!ulong(tokens[1]);

	string s = my_readln();
	string t = my_readln();

	uint[string] dp;

	string f(in string str, uint i, ulong pos)
	{
		if (i == s.length) return str;

		foreach (j; pos..t.length)
		{
			if (s[i] == t[j])
			{
				auto next = str ~ s[i];
				dp[next]  = min(dp.get(next, uint.max), i);
				auto r1   = f(next, i + 1, j + 1);
				auto r2   = f(str, i + 1, pos);
				return r1.length >= r2.length ? r1 : r2;
			}
		}
		return f(str, i + 1, pos);
	}

	writeln(f("", 0, 0));
	stdout.flush();
	/*}catch (Throwable e)
	{
	writeln(e.toString());
	}
	readln();*/
}