import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String  s = in.nextLine();
        System.out.println(deal(s));
    }
    public static String deal(String s) {
        int n = s.length();
        HashMap<Character, Integer> map = new HashMap<>();
        boolean[] visited = new boolean[128];
        char[] cs = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        //统计数字
        for (int i = 0; i < n; i++) {
            map.put(cs[i], map.getOrDefault(cs[i], 0) + 1);
        }
        for (int i = 0; i < n; i++) {
            char c = cs[i];
            map.put(c, map.get(c) - 1);
            if (visited[c]) continue;
            //没访问过的
            while (!stack.isEmpty() && stack.peek() > c && map.get(stack.peek()) > 0) {
                visited[stack.pop()] = false;
            }
            //当前字符计进入
            stack.push(c);
            visited[c] = true;
        }
        StringBuilder sb = new StringBuilder();
        while (!stack.isEmpty()) {
            sb.insert(0, stack.pop());
        }
        return sb.toString();
    }
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        System.out.println(remove(str));
    }
    
    private static String remove(String str) {
        if(str == null || str.length() < 2) return str;
        int[] termFreq = new int[26];
        for(int i = 0; i < str.length(); i++) termFreq[str.charAt(i) - 'a'] ++;
        int minAsciiIndex = 0;
        for(int i = 0; i < str.length(); i++){
            if(--termFreq[str.charAt(i) - 'a'] == 0){
                break;
            }else{
                minAsciiIndex = str.charAt(i) < str.charAt(minAsciiIndex)? i: minAsciiIndex;
            }
        }
        String minAlpha = String.valueOf(str.charAt(minAsciiIndex));
        return minAlpha + remove(str.substring(minAsciiIndex + 1).replaceAll(minAlpha, ""));
    }
} import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
             String str=sc.nextLine();
             solve(str,"");
        }
       
        sc.close();
    }
    public static void solve(String str,String res) {
		if(str.isEmpty()) {
			System.out.println(res);
			return;
		}
		String s=str.substring(0,1);
		if(res.contains(s)) {
			String tmp=res.replace(s, "").concat(s);
			if(tmp.compareTo(res)>0) {
				str=str.replace(s, "");
			}else {
				res=tmp;
				str=str.substring(1);
			}
		}else {
			res=res.concat(s);
			str=str.substring(1);
		}
		solve(str,res);
	}
} public static String RemoveDup(String s){ if (s.length() < 2) { return s; } Map<Character,Integer> m = new HashMap<Character,Integer>(); char[] chs = s.toCharArray(); List<Integer> list = new ArrayList<Integer>(); int tmp = -1; ll: for(int i = chs.length-1; i >= 0; i--){ if (m.containsKey(chs[i])){ if (chs[i] >= tmp){ list.add(i); continue ll; }else{ list.add(m.get(chs[i])); m.put(chs[i], i); tmp = (int)chs[i]; continue ll; } } m.put(chs[i], i); tmp = chs[i]; } for (Integer num : list) { chs[num] = '-'; } String str = new String(chs); return str.replaceAll("-", ""); }