#include <bits/stdc++.h>
using namespace std;
int const N = 1e5 + 1;
char s[N];
int main() {
  scanf("%s", s);
  int len = strlen(s);
  int zc = 0, oc = 0, qc, zcn, ocn, g = len - 2;
  for (int i = 0; i < len; ++i) zc += s[i] == '0', oc += s[i] == '1';
  qc = len - (zc + oc);
  zcn = g / 2 - zc + 2;
  ocn = ceil(g / 2.0) - oc;
  if (zcn < 0) zcn = 0;
  if (ocn < 0) ocn = 0;
  if (zcn <= 0 || zcn + ocn == qc) puts("00");
  zcn = g / 2 - zc + 1;
  ocn = ceil(g / 2.0) - oc + 1;
  if (zcn < 0) zcn = 0;
  if (ocn < 0) ocn = 0;
  if ((zcn <= 0 && ocn <= 0 || zcn + ocn == qc) && s[len - 1] == '1')
    puts("01");
  else if (s[len - 1] == '?') {
    zcn = g / 2 - zc + 1;
    ocn = ceil(g / 2.0) - oc;
    if (zcn < 0) zcn = 0;
    if (ocn < 0) ocn = 0;
    if (zcn <= 0 && ocn <= 0 || zcn + ocn == qc - 1) puts("01");
  }
  zcn = g / 2 - zc + 1;
  ocn = ceil(g / 2.0) - oc + 1;
  if (zcn < 0) zcn = 0;
  if (ocn < 0) ocn = 0;
  if ((zcn <= 0 && ocn <= 0 || zcn + ocn == qc) && s[len - 1] == '0')
    puts("10");
  else if (s[len - 1] == '?') {
    zcn = g / 2 - zc;
    ocn = ceil(g / 2.0) - oc + 1;
    if (zcn < 0) zcn = 0;
    if (ocn < 0) ocn = 0;
    if (zcn <= 0 && ocn <= 0 || zcn + ocn == qc - 1) puts("10");
  }
  zcn = g / 2 - zc;
  ocn = ceil(g / 2.0) - oc + 2;
  if (zcn < 0) zcn = 0;
  if (ocn < 0) ocn = 0;
  if (ocn <= 0 || zcn + ocn == qc) puts("11");
  return 0;
}
