#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 (s[i] >= '5') flag = true; } } //これ以降はその桁のを構築できる。 int flag = -1; for (int i = 0; i < n; i++){ if (flag == INF){ s[i] = '5'; continue; } if (s[i] >= '5') flag = i; else if (s[i] < '4'){ s[flag] = (s[flag] >= '6' ? '5' : '4'); for (int j = flag + 1; j <= i; j++) s[j] = '5'; flag = INF; } } return s; } 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; }