#include <iostream>
#include <vector>
using namespace std;
/*
恰好有一个数相同,也就是每个数字必须且只能出现2次
最高位不能是0,当给出的数位数为奇数则答案是1100...
如果是偶数,逻辑略微复杂,情况过多,需要每个都考虑到,不是练习模式很难全部覆盖
*/
int main() {
string data;
cin >> data;
if(data.size()%2 == 1) {
for(auto i = 0; i < data.size()/2+1; i++) {
if(i%2==0) {
cout << "11";
}else {
cout << "00";
}
}
cout << endl;
} else {
auto i = 0;
char last = -1;
vector<char> out;
for(; i < data.size()/2; i++) {
auto c = min(data[i*2],data[i*2+1]);
if(data[i*2] != data[i*2+1]) {
c++;
}
if(c == last) {
if(c < '9') {
out.push_back(c+1);
break;
}
int j = i-1; // last out p
int k = 0;
while(true) {
auto c = out[j-k];
auto inc = false;
if(c == '9') {
inc = true;
} else if(c == '8') {
if(j-k-1 >= 0) {
auto p = out[j-k-1];
if(p == '9') {
inc = true;
}
}
}
if(inc) {
k++;
if(j-k < 0) {
break;
}
} else {
break;
}
}
if(k > j) {
out.clear();
out.push_back('1');
i = -1;
break;
} else {
if(j-k-1 >= 0 && out[j-k-1] == out[j-k]+1) {
out[j-k]+=2;
} else {
out[j-k]+=1;
}
out.erase(out.begin()+j-k+1, out.end());
i = j-k;
break;
}
} else {
last = c;
out.push_back(c);
}
if(c > data[i*2] || c > data[i*2+1]) {
break;
}
}
i++;
for(auto k = 0; k < data.size()/2 - i; k++) {
if(k % 2== 0) {
out.push_back('0');
} else {
out.push_back('1');
}
}
for(auto c : out) {
cout << c << c;
}
cout << endl;
}
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号