1 #include <cmath>
   2 #include <cstdio>
   3 #include <cctype>
   4 #include <iostream>
   5 #include <string>
   6 #include <sstream>
   7 #include <algorithm>
   8 #include <vector>
   9 using namespace std;
  10 
  11 #define GI ({int _t; scanf("%d", &_t); _t;})
  12 #define FOR(i, a, b) for (int i=a; i<b; i++)
  13 #define REP(i, a) FOR(i, 0, a)
  14 #define sz size()
  15 #define pb push_back
  16 #define cs c_str()
  17 #define DBGV(_v) { REP(_i, _v.sz) { cout << _v[_i] << "\t";} cout << endl;}
  18 template<class T> void stov(string s,vector<T> &vi){vi.clear();istringstream sin(s);for(T v;sin>>v;vi.push_back(v));}
  19 
  20 int getval(char c) {
  21 	if (isdigit(c)) {
  22 		return c-'0';
  23 	}
  24 	if (isupper(c)) {
  25 		return c-'A'+10;
  26 	}
  27 }
  28 
  29 long long int value(string num, int base) {
  30 	int res=0;
  31 	for (int i=num.sz-1, j=0; i>=0; i--, j++) {
  32 		res += (long long int)(getval(num[i]) * pow((double)base, (double)j));
  33 	}
  34 	return res;
  35 }
  36 
  37 int main() {
  38 	string s1, s2;
  39 	while (cin >> s1 && cin >> s2) {
  40 		int start1 = getval(*max_element(s1.begin(), s1.end()));
  41 		int start2 = getval(*max_element(s2.begin(), s2.end()));
  42 		FOR(i, max(start1+1,2), 37) {
  43 			FOR(j, max(start2+1,2), 37) {
  44 				//cout << s1 << " " << i << " " << value(s1, i) << " :: " << s2 << " " << j << " " << value(s2, j) << endl;
  45 				if (value(s1, i) == value(s2, j)) {
  46 					printf ("%s (base %d) = %s (base %d)\n", s1.cs, i, s2.cs, j);
  47 					goto NEXT;
  48 				}
  49 			}
  50 		}
  51 		printf ("%s is not equal to %s in any base 2..36\n", s1.cs, s2.cs);
  52 		NEXT: ;
  53 	}
  54 }