#include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); vector> V = { {4,5,6}, {}, {0,2,3,4,6}, {0,2,3,5,6}, {1,2,3,5}, {0,1,3,5,6}, {1,3,4,5,6}, {0,2,5}, {}, {0,1,2,3,5} }; auto f = [&](vector C) -> bool { vector ap(7); for(int i=0; i<10; i++) for(auto v : V.at(i)) ap.at(v) += C.at(i); for(int nine=0; nine<=C.at(9); nine++){ vector memo = ap; ap.at(6) += nine; int c = ap.at(6); int more = c-ap.at(3); bool ok = true; if(more >= 0 && more <= C.at(0)){ ap.at(3) += more; ap.at(0) += C.at(0)-more,ap.at(1) += C.at(0)-more,ap.at(2) += C.at(0)-more; more = c-ap.at(5); if(more >= 0 && more <= C.at(1)){ ap.at(2) += more,ap.at(5) += more; ap.at(1) += C.at(1)-more,ap.at(4) += C.at(1)-more; more = c-ap.at(0); if(more >= 0 && more <= C.at(6)){ ap.at(0) += more; more = c-ap.at(1); if(more >= 0 && more <= C.at(7)){ ap.at(1) += more; } else ok = false; } else ok = false; } else ok = false; } else ok = false; if(ok) for(int i=0; i<6; i++) if(ap.at(i) != ap.at(i+1)){ok = false; break;} ap = memo; if(ok) return true; } return false; }; vector C(10); string s; cin >> s; int n = s.size(); bool smallest = true; string answer(n,'9'); auto dfs = [&](auto dfs,int digit,int v) -> void { if(v >= 10 || digit == n+1) return; if(smallest == false && digit == n) return; C.at(v) = n+1-digit,digit = n+1; if(smallest == false) C.at(v)--,digit--; while(C.at(v)){ if((digit == n || (smallest && digit == n+1)) && f(C)){ auto memo = C; if(digit == n+1){ smallest = false; answer = ""; for(int i=1; i<=9; i++){if(C.at(i)) C.at(i)--,answer += '0'+i; break;} for(int i=0; i<=9; i++) while(C.at(i)--) answer += '0'+i; C = memo; } else{ string now = ""; auto dfs2 = [&](auto dfs2,int d) -> bool { if(d == n) return true; int c = s.at(d)-'0'; if(C.at(c)){ C.at(c)--,now += s.at(d); if(dfs2(dfs2,d+1)) return true; C.at(c)++,now.pop_back(); } for(int i=c+1; i<=9; i++) if(C.at(i)){ C.at(i)--,now += '0'+i; for(int k=0; k<=9; k++) while(C.at(k)--) now += '0'+k; return true; } return false; }; if(dfs2(dfs2,0)){ if(answer.size() > n) answer = now; answer = min(answer,now),smallest = false; } C = memo; } } dfs(dfs,digit,v+1); C.at(v)--,digit--; } dfs(dfs,digit,v+1); }; dfs(dfs,0,0); cout << answer << endl; }