#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
static int const base = 26;
static int
decode(char const* s) {
int i=0, j, k;
for (j
=0, k
=strlen(s
); j
< k
; ++j
) {
int m=s[j]-'A';
if (m < 0) return -1;
i = i*base + (m+1);
if (i < 0) return -2;
}
return i;
}
static char const*
encode(char* dst, size_t dstsz, int n) {
char const* first = dst;
char* last = dst+dstsz;
if (n <= 0) return NULL;
if (first == last) return NULL;
*(--last) = '\0';
while (n-- > 0 && last > first) {
*(--last) = 'A' + n%base;
n = n / base;
}
return last;
}
int
main(void) {
char line[128];
char buf[10];
while (fscanf(stdin
, "%s", line
) != EOF
) { printf("'%s' convert to ", line
);
int dec = decode(line);
printf("'%d' <=> '%s'\n", dec
, encode
(buf
, sizeof buf
, dec
)); } else {
char const* enc
= encode
(buf
, sizeof buf
, atoi(line
)); printf("'%s' <=> '%d'\n", enc
, decode
(enc
)); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0YXRpYyBpbnQgY29uc3QgYmFzZSA9IDI2OwoKc3RhdGljIGludApkZWNvZGUoY2hhciBjb25zdCogcykgewoJaW50IGk9MCwgaiwgazsKCWZvciAoaj0wLCBrPXN0cmxlbihzKTsgaiA8IGs7ICsraikgewoJCQoJCWludCBtPXNbal0tJ0EnOwoKCQlpZiAobSA8IDApIHJldHVybiAtMTsKCgkJaSA9IGkqYmFzZSArIChtKzEpOwoKCQlpZiAoaSA8IDApIHJldHVybiAtMjsKCX0KCXJldHVybiBpOwp9CgpzdGF0aWMgY2hhciBjb25zdCoKZW5jb2RlKGNoYXIqIGRzdCwgc2l6ZV90IGRzdHN6LCBpbnQgbikgewoJY2hhciBjb25zdCogZmlyc3QgPSBkc3Q7CgljaGFyKiBsYXN0ID0gZHN0K2RzdHN6OwoKCWlmIChuIDw9IDApIHJldHVybiBOVUxMOwoJaWYgKGZpcnN0ID09IGxhc3QpIHJldHVybiBOVUxMOwoJCgkqKC0tbGFzdCkgPSAnXDAnOwoKCXdoaWxlIChuLS0gPiAwICYmIGxhc3QgPiBmaXJzdCkgewoJCSooLS1sYXN0KSA9ICdBJyArIG4lYmFzZTsKCQluID0gbiAvIGJhc2U7Cgl9CglyZXR1cm4gbGFzdDsKfQoKaW50Cm1haW4odm9pZCkgewoJY2hhciBsaW5lWzEyOF07CgljaGFyIGJ1ZlsxMF07CgoJd2hpbGUgKGZzY2FuZihzdGRpbiwgIiVzIiwgbGluZSkgIT0gRU9GKSB7CgkJcHJpbnRmKCInJXMnIGNvbnZlcnQgdG8gIiwgbGluZSk7CgoJCWlmIChpc2FscGhhKGxpbmVbMF0pKSB7CgkJCWludCBkZWMgPSBkZWNvZGUobGluZSk7CgkJCXByaW50ZigiJyVkJyA8PT4gJyVzJ1xuIiwgZGVjLCBlbmNvZGUoYnVmLCBzaXplb2YgYnVmLCBkZWMpKTsKCQl9IGVsc2UgewoJCQljaGFyIGNvbnN0KiBlbmMgPSBlbmNvZGUoYnVmLCBzaXplb2YgYnVmLCBhdG9pKGxpbmUpKTsKCQkJcHJpbnRmKCInJXMnIDw9PiAnJWQnXG4iLCBlbmMsIGRlY29kZShlbmMpKTsKCQl9Cgl9CglyZXR1cm4gMDsKfQo=