#include <bits/stdc++.h>
using namespace std;
struct Tnum {
  int a[1000];
  int l;
};
int getnum(char *te, Tnum &b) {
  int l = strlen(te);
  b.l = 0;
  int minn = 0;
  for (int i = l - 1; i >= 0; --i) {
    if (isalpha(te[i]))
      b.a[b.l++] = te[i] - 'A' + 10;
    else
      b.a[b.l++] = te[i] - '0';
    if (b.a[b.l - 1] > minn) minn = b.a[b.l - 1];
  }
  while (b.l > 1 && b.a[b.l - 1] == 0) b.l--;
  return minn;
}
int getvalue(const Tnum &a, int base) {
  int summ = 0;
  int pe = 1;
  for (int i = 0; i < a.l; ++i) {
    summ += a.a[i] * pe;
    pe *= base;
    if (summ > 60) return summ;
  }
  return summ;
}
char temp[200];
char t1[200], t2[200];
int l, r = 0;
Tnum nidong, nidong2;
int main() {
  scanf("%s", temp);
  int i;
  for (i = 0; temp[i] != ':'; ++i) t1[i] = temp[i];
  t1[i] = 0;
  int ni = i;
  for (i++; temp[i]; ++i) t2[i - ni - 1] = temp[i];
  t2[i] = 0;
  l = getnum(t1, nidong) + 1;
  int te = getnum(t2, nidong2) + 1;
  if (te > l) l = te;
  if (nidong.l <= 1 && nidong2.l <= 1 && nidong.a[0] < 24 && nidong2.a[0] < 60)
    puts("-1");
  else {
    r = 0;
    if (nidong.l > 1) {
      for (int i = l;; ++i) {
        if (getvalue(nidong, i) > 23) {
          r = i - 1;
          break;
        }
      }
    }
    if (nidong2.l > 1) {
      for (int i = l;; ++i) {
        if (getvalue(nidong2, i) > 59) {
          if (i - 1 < r || r == 0) r = i - 1;
          break;
        }
      }
    }
    if (r < l)
      puts("0");
    else {
      printf("%d", l);
      for (int i = l + 1; i <= r; ++i) printf(" %d", i);
    }
  }
  return 0;
}
