void main(){
  import std.stdio, std.conv, std.string, std.algorithm;
  auto s=readln.chomp;
  
  int n=s.length;
  auto ps=new int[][](n, 26);
  foreach(ref e; ps) fill(e, -1);
  auto bar=new int[](26);
  fill(bar, -1);
  foreach_reverse(i; 0..n){
    bar[s[i]-'a']=i;
    foreach(j; 0..26){
      if(bar[j]!=-1){
        ps[i][j]=bar[j];
      }
    }
  }

  auto dp=new int[](n);
  foreach_reverse(i; 0..n){
    bool ok=false;
    int dpdp=n+1;
    foreach(j; 0..26){
      if(ps[i][j]==-1){
        dp[i]=1;
        ok=true; break;
      }else{
        dpdp=min(dpdp, dp[min(n-1, ps[i][j]+1)]);
      }
    }
    if(ok) continue;
    assert(dpdp<n+1);
    dp[i]=dpdp+1;
  }
  // writeln(dp);

  string t;
  int k=0;
  foreach(i; 0..dp[0]){
    foreach(j; 0..26){
      if(ps[k][j]==-1){
        assert(dp[k]==1);
        t~=(j+'a').to!char;
        break;
      }else if(ps[k][j]+1<n){
        if(dp[k]==dp[ps[k][j]+1]+1){
          k=ps[k][j]+1;
          t~=(j+'a').to!char;
          break;
        }
      }else{
        assert(dp[k]==1);
        k=ps[k][j]+1;
        t~=(j+'a').to!char;
        break;
      }
    }
  }
  writeln(t);
}