#include <cstdio>
#include <cstring>
using namespace std;
#define max(a,b) (a>b?a:b)
const int MN = 250500;
const int maxState = (MN << 1);
struct State {
State *go[26], *suffix;
int depth, id;
long long cnt;
};
State pool[maxState], *point, *root, *sink;
int size;
State *newState(int dep) {
point->id = size++;
point->depth = dep;
return point++;
}
void init() {
point = pool;
size = 0;
root = sink = newState(0);
}
void insert(int a) {
State *p = newState(sink->depth+1);
State *cur = sink, *sufState;
while (cur && !cur->go[a]) {
cur->go[a] = p;
cur = cur->suffix;
}
if (!cur)
sufState = root;
else {
State *q = cur->go[a];
if (q->depth == cur->depth + 1)
sufState = q;
else {
State *r = newState(cur->depth+1);
memcpy(r->go, q->go, sizeof(q->go));
r->suffix = q->suffix;
q->suffix = r;
sufState = r;
while (cur && cur->go[a] == q) {
cur->go[a] = r;
cur = cur->suffix;
}
}
}
p->suffix = sufState;
sink = p;
}
void solve(char buf[]) {
int len = strlen(buf);
int tmp = 0, ans = 0, anspos = 0;
State *cur = root;
for (int i = 0; i < len; i++) {
if (cur->go[buf[i]-'a']) {
tmp++;
cur = cur->go[buf[i]-'a'];
} else {
while (cur && !cur->go[buf[i]-'a'])
cur = cur->suffix;
if (!cur) {
cur = root;
tmp = 0;
} else {
tmp = cur->depth + 1;
cur = cur->go[buf[i]-'a'];
}
}
if (ans < tmp) ans = tmp, anspos = i-tmp+1;
}
printf("%d\n",ans);
for (int i = anspos; i <= anspos+ans-1; i++) printf("%c",buf[i]);
}
char ch[MN];
int main() {
scanf("%s", ch);
init();
int len = strlen(ch);
for (int i = 0; i < len; i++) insert(ch[i]-'a');
scanf("%s", ch);
solve(ch);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWF4KGEsYikgKGE+Yj9hOmIpCmNvbnN0IGludCBNTiA9IDI1MDUwMDsKY29uc3QgaW50IG1heFN0YXRlID0gKE1OIDw8IDEpOwpzdHJ1Y3QgU3RhdGUgewoJU3RhdGUgKmdvWzI2XSwgKnN1ZmZpeDsKCWludCBkZXB0aCwgaWQ7Cglsb25nIGxvbmcgY250Owp9OwpTdGF0ZSBwb29sW21heFN0YXRlXSwgKnBvaW50LCAqcm9vdCwgKnNpbms7CmludCBzaXplOwpTdGF0ZSAqbmV3U3RhdGUoaW50IGRlcCkgewoJcG9pbnQtPmlkID0gc2l6ZSsrOwoJcG9pbnQtPmRlcHRoID0gZGVwOwoJcmV0dXJuIHBvaW50Kys7Cn0Kdm9pZCBpbml0KCkgewoJcG9pbnQgPSBwb29sOwoJc2l6ZSA9IDA7Cglyb290ID0gc2luayA9IG5ld1N0YXRlKDApOwp9CnZvaWQgaW5zZXJ0KGludCBhKSB7CglTdGF0ZSAqcCA9IG5ld1N0YXRlKHNpbmstPmRlcHRoKzEpOwoJU3RhdGUgKmN1ciA9IHNpbmssICpzdWZTdGF0ZTsKCXdoaWxlIChjdXIgJiYgIWN1ci0+Z29bYV0pIHsKCQljdXItPmdvW2FdID0gcDsKCQljdXIgPSBjdXItPnN1ZmZpeDsKCX0KCWlmICghY3VyKQoJCXN1ZlN0YXRlID0gcm9vdDsKCWVsc2UgewoJCVN0YXRlICpxID0gY3VyLT5nb1thXTsKCQlpZiAocS0+ZGVwdGggPT0gY3VyLT5kZXB0aCArIDEpCgkJCXN1ZlN0YXRlID0gcTsKCQllbHNlIHsKCQkJU3RhdGUgKnIgPSBuZXdTdGF0ZShjdXItPmRlcHRoKzEpOwoJCQltZW1jcHkoci0+Z28sIHEtPmdvLCBzaXplb2YocS0+Z28pKTsKCQkJci0+c3VmZml4ID0gcS0+c3VmZml4OwoJCQlxLT5zdWZmaXggPSByOwoJCQlzdWZTdGF0ZSA9IHI7CgkJCXdoaWxlIChjdXIgJiYgY3VyLT5nb1thXSA9PSBxKSB7CgkJCQljdXItPmdvW2FdID0gcjsKCQkJCWN1ciA9IGN1ci0+c3VmZml4OwoJCQl9CgkJfQoJfQoJcC0+c3VmZml4ID0gc3VmU3RhdGU7CglzaW5rID0gcDsKfQp2b2lkIHNvbHZlKGNoYXIgYnVmW10pIHsKCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKCWludCB0bXAgPSAwLCBhbnMgPSAwLCBhbnNwb3MgPSAwOwoJU3RhdGUgKmN1ciA9IHJvb3Q7Cglmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CgkJaWYgKGN1ci0+Z29bYnVmW2ldLSdhJ10pIHsKCQkJdG1wKys7CgkJCWN1ciA9IGN1ci0+Z29bYnVmW2ldLSdhJ107CgkJfSBlbHNlIHsKCQkJd2hpbGUgKGN1ciAmJiAhY3VyLT5nb1tidWZbaV0tJ2EnXSkKCQkJCWN1ciA9IGN1ci0+c3VmZml4OwoJCQlpZiAoIWN1cikgewoJCQkJY3VyID0gcm9vdDsKCQkJCXRtcCA9IDA7CgkJCX0gZWxzZSB7CgkJCQl0bXAgPSBjdXItPmRlcHRoICsgMTsKCQkJCWN1ciA9IGN1ci0+Z29bYnVmW2ldLSdhJ107CgkJCX0KCQl9CgkJaWYgKGFucyA8IHRtcCkgYW5zID0gdG1wLCBhbnNwb3MgPSBpLXRtcCsxOwoJfQoJcHJpbnRmKCIlZFxuIixhbnMpOwoJZm9yIChpbnQgaSA9IGFuc3BvczsgaSA8PSBhbnNwb3MrYW5zLTE7IGkrKykgcHJpbnRmKCIlYyIsYnVmW2ldKTsKfQpjaGFyIGNoW01OXTsKaW50IG1haW4oKSB7CglzY2FuZigiJXMiLCBjaCk7Cglpbml0KCk7CglpbnQgbGVuID0gc3RybGVuKGNoKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIGluc2VydChjaFtpXS0nYScpOwoJc2NhbmYoIiVzIiwgY2gpOwoJc29sdmUoY2gpOwoJcmV0dXJuIDA7Cn0=