#include <bits/stdc++.h>
using namespace std;
map<char, int> mp;
vector<int> ans;
int power(int n, int i) {
  if (i == 0) return 1;
  if (i % 2 == 0) return power(n, i / 2) * power(n, i / 2);
  return n * power(n, i / 2) * power(n, i / 2);
}
void solve(string x, string y, int n) {
  int sumx = 0;
  int sumy = 0;
  reverse(x.begin(), x.end());
  reverse(y.begin(), y.end());
  for (int i = 0; i < x.length(); i++) {
    sumx = sumx + (mp[x[i]]) * (power(n, i));
  }
  for (int i = 0; i < y.length(); i++) {
    sumy = sumy + (mp[y[i]]) * (power(n, i));
  }
  if (sumx >= 0 && sumx <= 23 && sumy >= 0 && sumy <= 59) ans.push_back(n);
}
int main() {
  string s, x, y;
  cin >> s;
  x = s.substr(0, s.find(':'));
  y = s.substr(s.find(':') + 1, s.length() - 1);
  char a = 'A';
  int maxx = 0;
  for (int i = 10; i <= 35; i++) {
    mp[a] = i;
    a++;
  }
  a = '0';
  for (int i = 0; i < 10; i++) {
    mp[a] = i;
    a++;
  }
  for (int i = 0; i < x.length(); i++) {
    if (mp[x[i]] > maxx) maxx = mp[x[i]];
  }
  for (int i = 0; i < y.length(); i++) {
    if (mp[y[i]] > maxx) maxx = mp[y[i]];
  }
  for (int i = maxx + 1; i < 150; i++) {
    solve(x, y, i);
  }
  if (ans.size() > 60) return cout << -1, 0;
  if (ans.size() == 0) return cout << 0, 0;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i] << " ";
  }
  return 0;
}
