#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  string s;
  cin >> s;
  int n = s.size();
  int ones = 0, zeros = 0, extras = 0;
  int f_one = n, f_zero = n, f_extra = n, l_one = -1, l_zero = -1, l_extra = -1;
  int nd_extra = n, nl_extra = -1;
  for (int i = 0; i < n; ++i) {
    if (s[i] == '1') {
      ++ones;
      f_one = min(f_one, i);
      l_one = max(l_one, i);
    } else if (s[i] == '0') {
      ++zeros;
      f_zero = min(f_zero, i);
      l_zero = max(l_zero, i);
    } else {
      ++extras;
      if (f_extra == n)
        f_extra = i;
      else if (nd_extra == n)
        nd_extra = i;
      nl_extra = l_extra;
      l_extra = max(l_extra, i);
    }
  }
  if (f_zero == n) f_zero = -1;
  if (f_one == n) f_one = -1;
  if (l_zero == n) l_zero = -1;
  if (l_one == n) l_one = -1;
  if (zeros + extras - 2 >= (n - 2) / 2) printf("00\n");
  bool cond1 = ones - 2 < (n - 1) / 2;
  bool cond2 = zeros - 2 < (n - 2) / 2;
  if (cond1 && cond2) {
    bool onezero = 0;
    bool zeroone = 0;
    if (zeros + 1 - 2 < (n - 2) / 2) {
      if (max(l_extra, l_zero) > max(nl_extra, l_one)) onezero = 1;
    } else {
      if (l_zero > max(l_extra, l_one)) onezero = 1;
    }
    if (ones + 1 - 2 < (n - 1) / 2) {
      if (max(l_extra, l_one) > max(nl_extra, l_zero)) zeroone = 1;
    } else {
      if (l_one > max(l_extra, l_zero)) zeroone = 1;
    }
    if (zeroone) printf("01\n");
    if (onezero) printf("10\n");
  }
  if (ones + extras - 2 >= (n - 1) / 2) printf("11\n");
  return 0;
}
