#include <stdio.h>
#define MAX 5
typedef unsigned long long ull;
char binary[MAX];
int binary_len;
char ternary[MAX];
int ternary_len;
ull convert_n_nary_to_ull(ull n, char *nary, int len) {
ull ret = 0;
ull now = 1;
for (int i = 0; i < len; ++i) {
ret += now * (nary[len - 1 - i] - '0');
now *= n;
}
return ret;
}
int main(int argc, char **argv)
{
freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
int cases = 0;
scanf("%d", &cases);
for (int i = 0; i < cases; ++i) {
scanf("%s", binary);
for (binary_len = 0; binary[binary_len] != '\0'; ++binary_len);
scanf("%s", ternary);
for (ternary_len = 0; ternary[ternary_len] != '\0'; ++ternary_len);
int is_end = 0;
ull result = 0ULL;
ull b = convert_n_nary_to_ull(2ULL, binary, binary_len);
ull b_max = 1;
for (int j = 0; j < binary_len - 2; ++j)
b_max *= 2ULL;
for (int j = 0; j < ternary_len; ++j) {
char origin = ternary[j];
for (int k = 0; k < 3; ++k) {
if (k == origin - '0')
continue;
ternary[j] = k + '0';
ull t = convert_n_nary_to_ull(3ULL, ternary, ternary_len);
ull diff = b ^ t;
if (diff <= b_max) {
while (1) {
if (diff == 1ULL)
break;
else if (diff % 2ULL != 0ULL)
break;
diff /= 2ULL;
}
if (diff == 1ULL) {
if (result == 0ULL) {
result = t;
}
else {
result = 0ULL;
is_end = 1;
break;
}
}
}
}
ternary[j] = origin;
if (is_end)
break;
}
if (result == 0ULL)
printf("-1\n");
else
printf("%llu\n", result);
}
return 0;
}
댓글