
import java.util.Scanner

object Main extends App {

  val FF = (1 << 26) - 1

  val sc = new Scanner(System.in)

  val str = sc.next()
  var cs = Array.fill(26)(Seq[Int](Int.MaxValue))
  str.zipWithIndex
    .groupBy(_._1)
    .toStream
    .foreach {
      case (c, seq) =>
//        println(c, seq)
        cs(c - 'a') = seq.map(_._2) ++ Seq(Int.MaxValue)
    }


  var bf = 0
  var len = 0
  for (c <- str.reverse) {
    bf = bf | (1 << (c - 'a'))

    if (bf == FF) {
      bf = 0
      len = len + 1
    }
  }


//  cs.foreach(println(_))
//  println("info", len, bf)

  val head = Range(0, 26)
    .find(i => ((bf >> i) & 1) == 0).get
  print(('a' + head).toChar)

  var cur = cs(head)(0)
  for (i <- 1 to len) {
    cur = find(cur, len - i + 2)
  }
  println

  def find(x: Int, k: Int): Int = {
    for (c <- 0 to 25) {
      val t = find(x, cs(c))
//      println("inner", ('a' + c).toChar, k, t, cs(c).length - t)
      if (cs(c).length - t <= k) {
        print(('a' + c).toChar)
        return if (cs(c).isEmpty) 0 else cs(c)(t)
      }
    }
    0
  }

  def find(x: Int, seq: Seq[Int]) = {
    var l = 0
    var r = seq.length
    while (l < r) {
      val m = (l + r) / 2
      if (seq(m) <= x) l = m + 1
      else r = m
    }
    l
  }
}
