#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chkmax(T& x, T y) {
  x = max(x, y);
}
template <typename T>
void chkmin(T& x, T y) {
  x = min(x, y);
}
void extend_gcd(long long a, long long b, long long& d, long long& x,
                long long& y) {
  if (b) {
    extend_gcd(b, a % b, d, y, x);
    y -= a / b * x;
  } else
    d = a, x = 1, y = 0;
}
void SetupIo() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
}
void Main();
int main() {
  SetupIo();
  Main();
  return 0;
}
const int N = 1e6 + 10;
const int MOD = 998244353;
int dp[(1 << 20) + 10];
char s[N];
int n;
inline int Id(char x) { return x - 'a'; }
int Ans() {
  memset(dp, 0, sizeof(dp));
  n = strlen(s);
  int tot = 0;
  for (int i = (0), _b = (n); i < _b; ++i) {
    chkmax(tot, Id(s[i]) + 1);
  }
  for (int i = (0), _b = (n); i < _b; ++i) {
    int tmp = 0;
    for (int j = 0; j < tot && i + j < n; ++j) {
      int id = Id(s[i + j]);
      if ((tmp >> id) & 1) break;
      tmp |= 1 << id;
      chkmax(dp[tmp], j + 1);
    }
  }
  int top = 1 << tot;
  for (int i = (0), _b = (top); i < _b; ++i) {
    for (int j = (0), _b = (tot); j < _b; ++j) {
      chkmax(dp[i | (1 << j)], dp[i]);
    }
  }
  int ans = 0;
  for (int i = (0), _b = (top); i < _b; ++i) {
    int j = (top - 1) - i;
    if (dp[i] + dp[j] > ans) {
    }
    chkmax(ans, dp[i] + dp[j]);
  }
  return ans;
}
void Main() {
  cin >> s;
  cout << Ans() << '\n';
}
