#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
char s[200010];
char t[200010];
vector<int> v[30];
int a[200010][2];
bool judge(int pos) {
  for (int i = 1; t[i]; i++) {
    int c = t[i] - 'a';
    int p = upper_bound(v[c].begin(), v[c].end(), pos) - v[c].begin();
    if (p == v[c].size()) return 0;
    pos = v[c][p];
  }
  return 1;
}
int main() {
  scanf("%s", s);
  scanf("%s", t);
  for (int i = 0; s[i]; i++) v[s[i] - 'a'].push_back(i);
  int pos = -1;
  int ans = 0;
  for (int i = 0; t[i]; i++) {
    int c = t[i] - 'a';
    int p = upper_bound(v[c].begin(), v[c].end(), pos) - v[c].begin();
    pos = v[c][p];
    a[i][0] = pos;
  }
  int len = strlen(s);
  ans = max(ans, len - pos - 1);
  int tlen = strlen(t);
  int k = v[t[tlen - 1] - 'a'].size();
  pos = v[t[tlen - 1] - 'a'][k - 1];
  a[tlen - 1][1] = pos;
  for (int i = tlen - 2; i >= 0; i--) {
    int c = t[i] - 'a';
    int p = lower_bound(v[c].begin(), v[c].end(), pos) - v[c].begin();
    pos = v[c][p - 1];
    a[i][1] = pos;
  }
  ans = max(ans, a[0][1]);
  for (int i = 1; i < tlen; i++) ans = max(ans, a[i][1] - a[i - 1][0] - 1);
  printf("%d\n", ans);
  return 0;
}
