import std; void main() { auto n = readln.chomp.dup; const len = n.length; while(true) { const m = untriplize(n); if(!isNabeatsu(m)) { writeln(m); return; } int id = -1; foreach(i, c; m) { if(c == '3') { id = cast(int)i; break; } } if(id == -1) { if(isNabeatsu(m)) { n = (m[0..$ - 1] ~ cast(char)(m[$ - 1] - 1)).dup; } else { writeln(m); return; } } n = m[0..id] ~ "2" ~ "9".replicate(len - id - 1); } } char[] untriplize(const char[] n) { int p = 0; foreach(c; n) { const m = c - '0'; p += m; } const d = ((((n[$ - 1] - '0') - (p % 3 == 0)) + 10) % 10) + '0'; return (n[0..$ - 1] ~ d).dup; } bool isNabeatsu(const char[] s) { int p = 0; foreach(c; s) { p += c - '0'; } return s.any!"a == '3'" || p % 3 == 0; }