#include #include using namespace std; using namespace atcoder; using ll = long long; using ull = unsigned long long; using vi = vector; using vvi = vector; using vl = vector; using vvl = vector; using vs = vector; using vpi = vector>; using vpl = vector>; #define rep(i, s, n) for (int i = (s); i < (int)(n); ++i) #define repr(i, s, n) for (int i = (s); i >= (int)(n); --i) #define sz(x) ((int)(x).size()) template bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;} template bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;} auto _ = []{ios::sync_with_stdio(false); cin.tie(nullptr); return 0;}(); const int INFI = 1 << 30; const ll INFL = 1LL << 62; int main() { string s; cin >> s; int n=sz(s); bool jdg = 1; for (auto x : s){ if((x - '0')<5){ jdg=0; break; } } if(jdg){ rep (i, 0, n){ cout<<5; } cout << '\n'; return 0; } if((s[0] - '0'<=4)){ jdg = 1; for (auto x : s){ if((x - '0')<4){ jdg=0; break; } } if(!jdg){ rep (i, 0, n-1){ cout<<5; } cout << '\n'; return 0; } } string ans=""; jdg=0; reverse (s.begin(), s.end()); for (auto x : s){ if(jdg){ x=(char)(((x - '0')-1)+'0'); jdg=0; } if((x - '0')>=4)ans.push_back (x); else{ ans.push_back ('5'); jdg=1; } } reverse (ans.begin(), ans.end()); cout << ans << '\n'; return 0; }