//venk13
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
#include <utility>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <fstream>
#include <cassert>
using namespace std;
#define sz(a) (int)(a.size())
#define len(a) (int)(a.length())
#define pb push_back
#define mp make_pair
///////////////////////////http://c...content-available-to-author-only...s.com/blog/entry/4025
#define REP(i, n) for (int i = 0; i < (int)(n); ++i)
const int MAXN = 1 << 19;
string S;
int N, gap;
int sa[MAXN], pos[MAXN], tmp[MAXN], lcp[MAXN];
bool sufCmp(int i, int j)
{
if (pos[i] != pos[j])
return pos[i] < pos[j];
i += gap;
j += gap;
return (i < N && j < N) ? pos[i] < pos[j] : i > j;
}
void buildSA()
{
N = len(S);
REP(i, N) sa[i] = i, pos[i] = S[i];
for (gap = 1;; gap *= 2)
{
sort(sa, sa + N, sufCmp);
REP(i, N - 1) tmp[i + 1] = tmp[i] + sufCmp(sa[i], sa[i + 1]);
REP(i, N) pos[sa[i]] = tmp[i];
if (tmp[N - 1] == N - 1) break;
}
}
void buildLCP()
{
for (int i = 0, k = 0; i < N; ++i) if (pos[i] != N - 1)
{
for (int j = sa[pos[i] + 1]; S[i + k] == S[j + k];)
++k;
lcp[pos[i]] = k;
if(k) --k;
}
}
///////////////////////////////
int main() {
string A, B; cin >> A >> B;
S = A + "$" + B + "#";
buildSA(); buildLCP();
int c2 = 1 << 30, maxFound = 0;
for(int i = 0; i < len(S) - 1;) {
int ptr = i, nwc1 = -1, nwc2 = 1 << 30, nowMax = lcp[i];
while(ptr < len(S) - 1 && lcp[ptr] == nowMax) {
if(sa[ptr] >= len(A)) nwc2 = min(nwc2, sa[ptr]);
if(sa[ptr + 1] >= len(A)) nwc2 = min(nwc2, sa[ptr + 1]);
if(sa[ptr] < len(A)) nwc1 = sa[ptr];
if(sa[ptr + 1] < len(A)) nwc1 = sa[ptr + 1];
ptr++;
}
if(nwc1 >= 0 && nwc2 < (1 << 30)) maxFound = max(maxFound, nowMax);
i = ptr;
}
for(int i = 0; i < len(S) - 1;) {
if(lcp[i] != maxFound) {
i++;
continue;
}
int ptr = i, nwc1 = -1, nwc2 = 1 << 30;
while(ptr < len(S) - 1 && lcp[ptr] == maxFound) {
if(sa[ptr] >= len(A)) nwc2 = min(nwc2, sa[ptr]);
if(sa[ptr + 1] >= len(A)) nwc2 = min(nwc2, sa[ptr + 1]);
if(sa[ptr] < len(A)) nwc1 = sa[ptr];
if(sa[ptr + 1] < len(A)) nwc1 = sa[ptr + 1];
ptr++;
}
if(nwc1 >= 0) c2 = min(c2, nwc2);
i = ptr;
}
if(maxFound == 0) {
cout << 0;
}
else {
cout << S.substr(c2, maxFound) << '\n' << maxFound << '\n';
}
return 0;
}
Ly92ZW5rMTMKI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIHN6KGEpIChpbnQpKGEuc2l6ZSgpKQojZGVmaW5lIGxlbihhKSAoaW50KShhLmxlbmd0aCgpKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vaHR0cDovL2MuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMuY29tL2Jsb2cvZW50cnkvNDAyNQojZGVmaW5lIFJFUChpLCBuKSBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpKG4pOyArK2kpCmNvbnN0IGludCBNQVhOID0gMSA8PCAxOTsKc3RyaW5nIFM7CmludCBOLCBnYXA7CmludCBzYVtNQVhOXSwgcG9zW01BWE5dLCB0bXBbTUFYTl0sIGxjcFtNQVhOXTsKYm9vbCBzdWZDbXAoaW50IGksIGludCBqKQp7CglpZiAocG9zW2ldICE9IHBvc1tqXSkKCQlyZXR1cm4gcG9zW2ldIDwgcG9zW2pdOwoJaSArPSBnYXA7CglqICs9IGdhcDsKCXJldHVybiAoaSA8IE4gJiYgaiA8IE4pID8gcG9zW2ldIDwgcG9zW2pdIDogaSA+IGo7Cn0Kdm9pZCBidWlsZFNBKCkKewoJTiA9IGxlbihTKTsKCVJFUChpLCBOKSBzYVtpXSA9IGksIHBvc1tpXSA9IFNbaV07Cglmb3IgKGdhcCA9IDE7OyBnYXAgKj0gMikKCXsKCQlzb3J0KHNhLCBzYSArIE4sIHN1ZkNtcCk7CgkJUkVQKGksIE4gLSAxKSB0bXBbaSArIDFdID0gdG1wW2ldICsgc3VmQ21wKHNhW2ldLCBzYVtpICsgMV0pOwoJCVJFUChpLCBOKSBwb3Nbc2FbaV1dID0gdG1wW2ldOwoJCWlmICh0bXBbTiAtIDFdID09IE4gLSAxKSBicmVhazsKCX0KfQp2b2lkIGJ1aWxkTENQKCkKewoJZm9yIChpbnQgaSA9IDAsIGsgPSAwOyBpIDwgTjsgKytpKSBpZiAocG9zW2ldICE9IE4gLSAxKQoJewoJCWZvciAoaW50IGogPSBzYVtwb3NbaV0gKyAxXTsgU1tpICsga10gPT0gU1tqICsga107KQoJCSsrazsKCQlsY3BbcG9zW2ldXSA9IGs7CgkJaWYoaykgLS1rOwoJfQp9Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAppbnQgbWFpbigpIHsKCXN0cmluZyBBLCBCOyBjaW4gPj4gQSA+PiBCOwoJUyA9IEEgKyAiJCIgKyBCICsgIiMiOwoJYnVpbGRTQSgpOyBidWlsZExDUCgpOwoJaW50IGMyID0gMSA8PCAzMCwgbWF4Rm91bmQgPSAwOwoJZm9yKGludCBpID0gMDsgaSA8IGxlbihTKSAtIDE7KSB7CgkJaW50IHB0ciA9IGksIG53YzEgPSAtMSwgbndjMiA9IDEgPDwgMzAsIG5vd01heCA9IGxjcFtpXTsKCQl3aGlsZShwdHIgPCBsZW4oUykgLSAxICYmIGxjcFtwdHJdID09IG5vd01heCkgewoJCQlpZihzYVtwdHJdID49IGxlbihBKSkgbndjMiA9IG1pbihud2MyLCBzYVtwdHJdKTsKCQkJaWYoc2FbcHRyICsgMV0gPj0gbGVuKEEpKSBud2MyID0gbWluKG53YzIsIHNhW3B0ciArIDFdKTsKCQkJaWYoc2FbcHRyXSA8IGxlbihBKSkgbndjMSA9IHNhW3B0cl07CgkJCWlmKHNhW3B0ciArIDFdIDwgbGVuKEEpKSBud2MxID0gc2FbcHRyICsgMV07CgkJCXB0cisrOwoJCX0KCQlpZihud2MxID49IDAgJiYgbndjMiA8ICgxIDw8IDMwKSkgbWF4Rm91bmQgPSBtYXgobWF4Rm91bmQsIG5vd01heCk7CgkJaSA9IHB0cjsKCX0KCWZvcihpbnQgaSA9IDA7IGkgPCBsZW4oUykgLSAxOykgewoJCWlmKGxjcFtpXSAhPSBtYXhGb3VuZCkgewoJCQlpKys7CgkJCWNvbnRpbnVlOwoJCX0KCQlpbnQgcHRyID0gaSwgbndjMSA9IC0xLCBud2MyID0gMSA8PCAzMDsKCQl3aGlsZShwdHIgPCBsZW4oUykgLSAxICYmIGxjcFtwdHJdID09IG1heEZvdW5kKSB7CgkJCWlmKHNhW3B0cl0gPj0gbGVuKEEpKSBud2MyID0gbWluKG53YzIsIHNhW3B0cl0pOwoJCQlpZihzYVtwdHIgKyAxXSA+PSBsZW4oQSkpIG53YzIgPSBtaW4obndjMiwgc2FbcHRyICsgMV0pOwoJCQlpZihzYVtwdHJdIDwgbGVuKEEpKSBud2MxID0gc2FbcHRyXTsKCQkJaWYoc2FbcHRyICsgMV0gPCBsZW4oQSkpIG53YzEgPSBzYVtwdHIgKyAxXTsKCQkJcHRyKys7CgkJfQoJCWlmKG53YzEgPj0gMCkgYzIgPSBtaW4oYzIsIG53YzIpOwoJCWkgPSBwdHI7Cgl9CglpZihtYXhGb3VuZCA9PSAwKSB7CgkJY291dCA8PCAwOwoJfQoJZWxzZSB7CgkJY291dCA8PCBTLnN1YnN0cihjMiwgbWF4Rm91bmQpIDw8ICdcbicgPDwgbWF4Rm91bmQgPDwgJ1xuJzsKCX0KCXJldHVybiAwOwp9