#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include using namespace std; typedef long long ll; const int INF = 1<<30; const ll INFLL = 1LL<<60; const ll MOD = 998244353; const double INFD = 1.0E10; const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, -1, 0, 1}; map dm = {{0, 'D'}, {1, 'L'}, {2, 'U'}, {3, 'R'}}; // const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1}; // const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1}; using Pair = pair; using mint = atcoder::modint998244353; // using mint = atcoder::modint1000000007; string solve(string s){ int n = s.size(); if (s.front() <= '3'){ string ans(n - 1, '5'); return ans; } else if (s.front() == '4'){ bool flag = false; for (int i = 0; i < n; i++){ if (!flag && s[i] < '4'){ string ans(n - 1, '5'); return ans; } if (flag){ if (s[i] <= '4') s[i] = '5'; } else if (s[i] >= '5'){ s[i] = '5'; flag = true; } // cerr << i << " " << flag << endl; } return s; } else if (s.front() == '5'){ bool flag = false; for (int i = 0; i < n; i++){ if (!flag && s[i] < '4'){ string ans(n, '5'); ans[0] = '4'; return ans; } if (flag){ if (s[i] <= '4') s[i] = '5'; } else if (s[i] > '5'){ s[i] = '5'; flag = true; } } return s; } else{ string ans(n, '5'); return ans; } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); string s; cin >> s; string ans = solve(s); cout << ans << endl; return 0; }