//dfs+剪枝
#include<bits/stdc++.h>
using namespace std;
int n,sum1=-1;
string s;
void dfs(int sol[],int cnt,int pos,int num)
{
if(cnt==num) {
int sum=0;
for(int i=0;i<cnt;i++)
{
sum=sum*10+sol[ i ];
}
//cout<<sum<<endl;
if( sum <= n ) {
sum1=max(sum,sum1);
}
return;
//cout<<sum1<<endl;
}
for(int i=pos;i<=9;i++)
{
if(i==0&&cnt==0) continue;
if(num==s.length()) {
sol[cnt]=i;
if(sol[0]>s[0]+'0') continue;
if(sol[0]==s[0]+'0') {
if(sol[cnt]<=s[cnt]+'0')
{
dfs(sol,cnt+1,i,num);
}
else continue;
}
else {
dfs( sol,cnt+1,i,num);
}
}
else {
sol[cnt]=i;
dfs( sol,cnt+1,i,num);
}
}
return;
}
int main()
{
scanf("%d",&n);
if(n==0) {
cout<<"0"<<endl;
return 0;
}
else {
s.clear();
int k=n,num=0;
while(k)
{
s+='0'+k%10;
k/=10;
num++;
}
reverse(s.begin(),s.end());
for(int i=num;i>=1;i--)
{
int sol[15];
dfs(sol,0,0,i);
if(sum1!=-1) {
break;
}
}
cout<<sum1<<endl;
}
return 0;
}