两个最小循环位移的交集

C++ Hard strings

任务 «两个最小循环位移的交集»

给定两个由小写拉丁字母组成的字符串 s 和 t。需要找出最长的公共子串的长度,该子串是字符串 s 的某个循环移位和字符串 t 的某个循环移位的子串。循环移位是指将字符串的所有字符向左移动 k 个位置,而左侧移出的字符被移到末尾。字符串长度不超过 10^5。如果未找到公共子串,则输出 0。

输入格式

在第一行给出一个字符串 s (1 ≤ |s| ≤ 10^5)。在第二行给出一个字符串 t (1 ≤ |t| ≤ 10^5)。字符串仅由小写拉丁字母组成。

输出格式

输出一个整数——在某个循环移位s和某个循环移位t中出现的最长公共子串的长度。

示例

示例 1

输入
abc def
输出
0

示例 2

输入
bcd
输出
abc
main.cpp