#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
long long x, y, z, a, seg[4 * 100005], lazy[4 * 100005];
string s, ss;
void progation(long long n, long long s, long long e) {
  seg[n] += lazy[n];
  if (s != e) {
    lazy[n * 2] += lazy[n];
    lazy[n * 2 + 1] += lazy[n];
  }
  lazy[n] = 0;
}
void update(long long n, long long s, long long e, long long l, long long r,
            long long val) {
  progation(n, s, e);
  if (s > r || e < l) {
    return;
  }
  if (s >= l && e <= r) {
    lazy[n] += val;
    progation(n, s, e);
    return;
  }
  update(n * 2, s, (s + e) / 2, l, r, val);
  update(n * 2 + 1, (s + e) / 2 + 1, e, l, r, val);
  seg[n] = max(seg[n * 2], seg[n * 2 + 1]);
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  ;
  cin >> s;
  for (int i = 0; i < s.size(); i++) {
    if (s[i] == '0') {
      update(1, 1, s.size(), i + 1, s.size(), 1);
    } else {
      update(1, 1, s.size(), 1, i + 1, 1);
    }
  }
  long long maxi = seg[1];
  ss = s;
  for (int i = 0; i < s.size(); i++) {
    if (ss[i] == '1') {
      ss[i] = '0';
      update(1, 1, s.size(), 1, i + 1, -1);
      update(1, 1, s.size(), i + 1, s.size(), 1);
      if (seg[1] != maxi) {
        ss[i] = '1';
        update(1, 1, s.size(), 1, i + 1, 1);
        update(1, 1, s.size(), i + 1, s.size(), -1);
      }
    }
  }
  cout << ss << endl;
  return 0;
}
