#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb emplace_back
#define ull unsigned long long
const int N = 1e5 + 5, base = 1e9 + 7, mod = 1e9 + 9;
const long long inf = 0x3f3f3f3f3f3f3f3f;
char s[N], t[N];
int n, ans, hs1[30][N], hs2[30][N], pw[N];
int pos1[N], pos2[N], st1[N], st2[N], m;
vector<int> p1[30], p2[30];
int get1(int l, int r, int i) {
if(l > r) return 0;
return hs1[i][r] - 1ll * hs1[i][l - 1] * pw[r - l + 1];
}
int get2(int l, int r, int i) {
if(l > r) return 0;
return hs2[i][r] - 1ll * hs2[i][l - 1] * pw[r - l + 1];
}
bool check(int k) {
unordered_map<ull, bool> mp;
for (int i = 0; i < 26; i ++) st1[i] = st2[i] = 0, pos1[i] = pos2[i] = -1;
for (int i = 1; i <= m - k + 1; i ++) {
vector<int> o2;
for (int j = 0; j < 26; j ++) {
while (pos2[j] + 1 < (int)p2[j].size() && p2[j][pos2[j] + 1] <= i + k - 1) pos2[j] ++;
while (st2[j] + 1 < (int)p2[j].size() && p2[j][st2[j]] < i) st2[j] ++;
if(p2[j].size()) o2.pb((1ll * get2(st2[j] + 1, pos2[j], j) * base + (i + k - p2[j][pos2[j]])));
}
sort(o2.begin(), o2.end());
ull sum2 = 0;
for (int e : o2) sum2 = sum2 * mod + e;
mp[sum2] = 1;
}
for (int i = 1; i <= n - k + 1; i ++) {
vector<int> o1;
for (int j = 0; j < 26; j ++) {
while (pos1[j] + 1 < (int)p1[j].size() && p1[j][pos1[j] + 1] <= i + k - 1) pos1[j] ++;
while (st1[j] + 1 < (int)p1[j].size() && p1[j][st1[j]] < i) st1[j] ++;
if(p1[j].size()) o1.pb((1ll * get1(st1[j] + 1, pos1[j], j) * base + (i + k - p1[j][pos1[j]])));
}
sort(o1.begin(), o1.end());
ull sum1 = 0;
for (int e : o1) sum1 = sum1 * mod + e;
if(mp.count(sum1)) return 1;
}
return 0;
}
void Solve() {
cin >> (s + 1) >> (t + 1);
n = strlen(s + 1), m = strlen(t + 1), pw[0] = 1;
for (int i = 1; i <= n; i ++)
p1[s[i] - 97].pb(i);
for (int i = 1; i <= m; i ++)
p2[t[i] - 97].pb(i);
for (int i = 1; i <= max(n, m); i ++)
pw[i] = 1ll * pw[i - 1] * base;
for (int i = 0; i < 26; i ++) {
for (int j = 0; j < (int)p1[i].size() - 1; j ++) {
hs1[i][j + 1] = (1ll * hs1[i][j] * base + p1[i][j + 1] - p1[i][j]);
}
for (int j = 0; j < (int)p2[i].size() - 1; j ++) {
hs2[i][j + 1] = (1ll * hs2[i][j] * base + p2[i][j + 1] - p2[i][j]);
}
}
int l = 1, r = max(n, m), ans = 1;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid)) l = mid + 1, ans = mid;
else r = mid - 1;
}
printf("%lld\n", ans);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int T = 1;
// cin >> T;
while (T --) {
Solve();
}
return 0;
}
求调 85 pts,WA on #4#6#7.