#include <bits/stdc++.h>
using namespace std;
const int MX = (1 << 20);
int mx[MX];
string s;
int query(int pos) {
  int mask = 0;
  int ans = 0;
  int con = 0;
  do {
    int bt = s[pos] - 'a';
    if (((mask >> bt) & 1) == 1) break;
    con++;
    mask |= (1 << bt);
    ans = max(ans, mx[(mask ^ (MX - 1))] + con);
    pos--;
  } while (pos >= 0);
  return ans;
}
void llena(int pos, int mask, int con) {
  if (mx[mask] >= con) return;
  if (pos == 20) {
    return;
  }
  llena(pos + 1, mask | (1 << pos), con);
  llena(pos + 1, mask, con);
  mx[mask] = con;
  return;
}
void update(int pos, int n) {
  int mask = 0;
  int con = 0;
  for (int i = pos; i < min(n, pos + 20); i++) {
    int bt = s[i] - 'a';
    if (((mask >> bt) & 1) == 1) break;
    mask |= (1 << bt);
    con++;
    mx[mask] = max(mx[mask], con);
    for (int j = 0; j < 20; j++) {
      if (((mask >> j) & 1) == 0 && mx[mask | (1 << j)] < con) {
        llena(0, mask | (1 << j), con);
      }
    }
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout.precision(10);
  cout << fixed;
  cin >> s;
  int n = s.size();
  int ans = 0;
  for (int i = n - 1; i >= 0; i--) {
    ans = max(ans, query(i));
    update(i, n);
  }
  ans = max(ans, mx[0]);
  cout << ans << "\n";
  return 0;
}
