#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); int bf=-1; // 最後に5が出現した位置 string ans=""; rep (i, 0, n){ if(s[i]=='5'){ bf=i; ans.push_back ('5'); } else if(s[i]=='4')ans.push_back ('4'); else if(s[i]-'0'>5){ // 6以上 // i以降を5にする rep (j, 0, n-i){ ans.push_back ('5'); } break; } else { // 3以下 if(bf==-1){ // 1度も5が出現していない ans=""; rep (j, 0, n-1){ ans.push_back ('5'); // 桁数-1個の5 } break; } else{ ans[bf]='4'; // 最後に出現した5を4に int siz=sz(ans); rep (j, bf+1, siz){ // ansのbf以降を5に s[j]='5'; } rep (j, 0, n-siz){ ans.push_back ('5'); // n桁になるまで5を追加 } } } } cout << ans << '\n'; return 0; }