#include using namespace::std; vector suffix_array(vector &s, int char_bound = -1) { int n = s.size(); vector a(n); if (n == 0) { return a; } if (char_bound != -1) { vector aux(char_bound, 0); for (int i = 0; i < n; i++) { aux[s[i]]++; } int sum = 0; for (int i = 0; i < char_bound; i++) { int add = aux[i]; aux[i] = sum; sum += add; } for (int i = 0; i < n; i++) { a[aux[s[i]]++] = i; } } else { iota(a.begin(), a.end(), 0); sort(a.begin(), a.end(), [&](int i, int j) { return s[i] < s[j]; }); } vector sorted_by_second(n); vector ptr_group(n); vector new_group(n); vector group(n); group[a[0]] = 0; for (int i = 1; i < n; i++) { group[a[i]] = group[a[i - 1]] + (!(s[a[i]] == s[a[i - 1]])); } int step = 1; while (step < n) { int at = 0; for(int i = 0; i < n; i++){ sorted_by_second[at++] = a[i] - step < 0? a[i] - step + n : a[i] - step; } for (int i = n - 1; i >= 0; i--) { ptr_group[group[a[i]]] = i; } for (int i = 0; i < n; i++) { int x = sorted_by_second[i]; a[ptr_group[group[x]]++] = x; } new_group[a[0]] = 0; for (int i = 1; i < n; i++) { if (group[a[i]] != group[a[i - 1]]) { new_group[a[i]] = new_group[a[i - 1]] + 1; } else { int pre = (a[i - 1] + step >= n ? group[a[i - 1] + step - n] : group[a[i - 1] + step]); int cur = (a[i] + step >= n ? group[a[i] + step - n] : group[a[i] + step]); new_group[a[i]] = new_group[a[i - 1]] + (pre != cur); } } swap(group, new_group); step <<= 1; } return a; } vector lcp_construction(vector &s, vector &a){ int n = s.size(); vector rank(n, 0); for(int i=0; i lcp(n-1,0); for(int i=0; i 0) k -= 1; } return lcp; } int main(){ int n; scanf("%d", &n); vector v; vector color; for(int id = 1; id <= 2; id++){ vector cur(n); for(int i = 0; i < n; i++){ scanf("%d", &cur[i]); } for(int i = 0; i < n; i++){ v.emplace_back(cur[i]); color.emplace_back(id); } v.emplace_back(-id); color.emplace_back(-1); } vector sa = suffix_array(v); vector lcp = lcp_construction(v, sa); int ans = 0; for(int i = 4; i + 1 < sa.size(); i++){ if(color[sa[i]] ^ color[sa[i + 1]]){ ans = max(ans, lcp[i]); } } printf("%d\n", ans); return 0; }