#include <bits/stdc++.h>
using namespace std;
template <typename T>
void __read(T& a) {
  cin >> a;
}
template <typename T, typename... Args>
void __read(T& a, Args&... args) {
  cin >> a;
  __read(args...);
}
constexpr long long M7 = 1000000007ll;
constexpr long long M9 = 1000000009ll;
constexpr long long MFFT = 998244353ll;
template <class T>
void outv(T& a) {
  for (auto& x : a) cout << x << ' ';
}
mt19937 rnd(static_cast<unsigned>(
    chrono::steady_clock::now().time_since_epoch().count()));
template <class T>
void random_shuffle(T s, T e) {
  shuffle(s, e, rnd);
};
static auto __super_speed__ = (ios_base::sync_with_stdio(0), cin.tie(0));
int32_t main() {
  string s;
  __read(s);
  vector<long long> dp(1 << 20);
  long long l = 0, cur = 0, cnt = 0;
  for (long long r = 0; r < s.length(); ++r) {
    long long d = s[r] - 'a';
    while ((cur >> d) & 1) {
      long long z = s[l++] - 'a';
      cur ^= 1 << z;
      cnt--;
      dp[cur] = cnt;
    }
    cur |= 1 << d;
    cnt++;
    dp[cur] = cnt;
  }
  while (cur) {
    long long z = s[l++] - 'a';
    cur ^= 1 << z;
    cnt--;
    dp[cur] = cnt;
  }
  for (long long mask = 0; mask < dp.size(); ++mask) {
    for (long long i = 0; i < 20; ++i) {
      if ((mask >> i) & 1) {
        dp[mask] = max(dp[mask], dp[mask ^ (1 << i)]);
      }
    }
  }
  long long ans = 0;
  for (long long mask = 0; mask < dp.size(); ++mask) {
    ans = max(ans, dp[mask] + dp[((1 << 20) - 1) ^ mask]);
  }
  cout << ans;
  return 0;
}
