use proconio::{input, marker::Chars}; fn solve() -> String { input! { n: Chars, } let l = n.len(); if l == 1 { if n[0] == '4' { "4".to_owned() } else { "5".to_owned() } } else { if (n[0] as u8) < b'4' { "5".repeat(l - 1) } else { let mut mode = 0u8; let mut pos = 0; for (i, ci) in n.iter().enumerate().map(|(i, &c)| (i, c as u8 - b'0')) { if ci < 4 { mode = 1; pos = i; break; } else if ci > 5 { mode = 2; pos = i; break; } } match mode { 0 => n.iter().collect::(), 1 => { let mut ans = vec!['5'; l]; let mut pos5 = l; for i in (0..pos).rev() { if n[i] == '5' { pos5 = i; break; } } if pos5 == l { return "5".repeat(l - 1); } else { for i in 0..pos5 { ans[i] = n[i]; } ans[pos5] = '4'; } ans.iter().collect::() }, 2 => { let mut ans = vec!['5'; l]; for i in 0..pos { ans[i] = n[i]; } ans.iter().collect::() }, _ => unreachable!(), } } } } fn main() { let ans = solve(); println!("{}", ans); }