// SIGMA BOY hihihihihihihi
#define se second
#define fi first
#define pb push_back
#define pob pop_back
#define bitebi __builtin_popcountll
#include <bits/stdc++.h>
using namespace std ;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const ll Mod = 1e9+7;
const ll Maxn = 1e6+69;
const ll Maxm = 1e3;
const ll oo = 1e18;
const int inf = 1e9;
string s;
int Minid[10];
pii dp[Maxn];
// Minid[x]: Lưu trữ chỉ số của số t/m đề bài, với điều kiện thằng bắt đầu bằng giá trị x
pii FindMin (int End)
{
int resleng = inf, nextid;
for (int i = 9 ; i >= End ; --i )
{
if(resleng>=dp[Minid[i]].fi)
{
resleng = dp[Minid[i]].fi;
nextid = Minid[i];
}
}
return {resleng,nextid};
}
void Print()
{
pii res = FindMin(1);
int x = res.se;
while(x<s.size())
{
cout << s[x];
x = dp[x].se;
}
}
bool Check ()
{
int check[10] = {0};
for (auto x:s) check[x-'0']=1;
for (int i = 1 ; i <= 9 ; ++i)
if(!check[i])
{
cout << char(i+'0');
return false;
}
return true;
}
void Do()
{
cin >> s ;
int n = s.size()-1;
if(!Check()) return;
for (int i = 0 ; i <= 9 ; ++i)
{
s.pb(char(i+'0'));
Minid[i] = s.size()-1;
dp[s.size()-1] = {0,inf};
}
for (int i = n ; i >= 0 ; i--)
{
pii MinLeng = FindMin(0);
dp[i] = {1 + MinLeng.fi,MinLeng.se};
Minid[s[i]-'0']=i;
}
if(dp[0].fi==1) cout << s[dp[0].se];
else Print();
}
signed main ()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define task "test"
if(fopen(task".inp", "r")){
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int ntest=1;
while(ntest--) Do();
cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
}
Ly8gU0lHTUEgQk9ZIGhpaGloaWhpaGloaWhpCgojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgYml0ZWJpIF9fYnVpbHRpbl9wb3Bjb3VudGxsCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZCA7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8bGwsbGw+IHBsbDsKdHlwZWRlZiBwYWlyPGludCxpbnQ+IHBpaTsKY29uc3QgbGwgTW9kID0gMWU5Kzc7CmNvbnN0IGxsIE1heG4gPSAxZTYrNjk7CmNvbnN0IGxsIE1heG0gPSAxZTM7CmNvbnN0IGxsIG9vID0gMWUxODsKY29uc3QgaW50IGluZiA9IDFlOTsKCnN0cmluZyBzOwppbnQgTWluaWRbMTBdOwpwaWkgZHBbTWF4bl07Ci8vIE1pbmlkW3hdOiBMxrB1IHRy4buvIGNo4buJIHPhu5EgY+G7p2Egc+G7kSB0L20gxJHhu4EgYsOgaSwgduG7m2kgxJFp4buBdSBraeG7h24gdGjhurFuZyBi4bqvdCDEkeG6p3UgYuG6sW5nIGdpw6EgdHLhu4sgeAoKcGlpIEZpbmRNaW4gKGludCBFbmQpCnsKICAgIGludCByZXNsZW5nID0gaW5mLCBuZXh0aWQ7CiAgICBmb3IgKGludCBpID0gOSA7IGkgPj0gRW5kIDsgLS1pICkKICAgIHsKICAgICAgICBpZihyZXNsZW5nPj1kcFtNaW5pZFtpXV0uZmkpCiAgICAgICAgewogICAgICAgICAgICByZXNsZW5nID0gZHBbTWluaWRbaV1dLmZpOwogICAgICAgICAgICBuZXh0aWQgPSBNaW5pZFtpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4ge3Jlc2xlbmcsbmV4dGlkfTsKfQoKdm9pZCBQcmludCgpCnsKICAgIHBpaSByZXMgPSBGaW5kTWluKDEpOwogICAgaW50IHggPSByZXMuc2U7CiAgICB3aGlsZSh4PHMuc2l6ZSgpKQogICAgewogICAgICAgIGNvdXQgPDwgc1t4XTsKICAgICAgICB4ID0gZHBbeF0uc2U7CiAgICB9Cn0KCmJvb2wgQ2hlY2sgKCkKewogICAgaW50IGNoZWNrWzEwXSA9IHswfTsKICAgIGZvciAoYXV0byB4OnMpIGNoZWNrW3gtJzAnXT0xOwogICAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IDkgOyArK2kpCiAgICAgICAgaWYoIWNoZWNrW2ldKQogICAgewogICAgICAgIGNvdXQgPDwgY2hhcihpKycwJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnZvaWQgRG8oKQp7CiAgICBjaW4gPj4gcyA7CiAgICBpbnQgbiA9IHMuc2l6ZSgpLTE7CiAgICBpZighQ2hlY2soKSkgcmV0dXJuOwogICAgZm9yIChpbnQgaSA9IDAgOyBpIDw9IDkgOyArK2kpCiAgICB7CiAgICAgICAgcy5wYihjaGFyKGkrJzAnKSk7CiAgICAgICAgTWluaWRbaV0gPSBzLnNpemUoKS0xOwogICAgICAgIGRwW3Muc2l6ZSgpLTFdID0gezAsaW5mfTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBuIDsgaSA+PSAwIDsgaS0tKQogICAgewogICAgICAgIHBpaSBNaW5MZW5nID0gRmluZE1pbigwKTsKICAgICAgICBkcFtpXSA9IHsxICsgTWluTGVuZy5maSxNaW5MZW5nLnNlfTsKICAgICAgICBNaW5pZFtzW2ldLScwJ109aTsKICAgIH0KICAgIGlmKGRwWzBdLmZpPT0xKSBjb3V0IDw8IHNbZHBbMF0uc2VdOwogICAgZWxzZSBQcmludCgpOwp9CgpzaWduZWQgbWFpbiAoKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApLCBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKI2RlZmluZSB0YXNrICJ0ZXN0IgogICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSl7CiAgICAgICAgZnJlb3Blbih0YXNrIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGludCBudGVzdD0xOwogICAgd2hpbGUobnRlc3QtLSkgRG8oKTsKICAgIGNlcnI8PCJcblRpbWUgZWxhcHNlZDogIjw8MTAwMCpjbG9jaygpL0NMT0NLU19QRVJfU0VDPDwibXNcbiI7Cn0KCg==