#include <cstdio> #include <cstdlib> #include <cassert> #include <string> #include <vector> using namespace std; const string lowers = "abcdefghijklmnopqrstuvwxyz"; const string uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const string alphs = lowers + uppers; const string nums = "0123456789"; const string alphnums = alphs + nums; bool IsUpper(char c) { return 'A' <= c && c <= 'Z'; } bool IsLower(char c) { return 'a' <= c && c <= 'z'; } bool IsAlph(char c) { return IsUpper(c) || IsLower(c); } bool IsNum(char c) { return '0' <= c && c <= '9'; } bool IsAlphNum(char c) { return IsAlph(c) || IsNum(c); } string Successor(const string &str) { string ret = str; int i = ret.find_last_of(alphnums); if(i == string::npos) { ++(*ret.rbegin()); } else { int car = 1; while(car && i >= 0) { int radix; int d; if(IsUpper(ret[i])) { radix = 26; d = 'A'; } else if(IsLower(ret[i])) { radix = 26; d = 'a'; } else { assert(IsNum(ret[i])); radix = 10; d = '0'; } char n = (ret[i] - d + car) % radix + d; car = (ret[i] - d + car) / radix; ret[i] = n; while(car && --i >= 0 && !IsAlphNum(ret[i])) {} } if(car) { assert(i < 0); int k = ret.find_first_of(alphnums); assert(k != string::npos); if(IsUpper(ret[k])) { ret = ret.substr(0, k) + 'A' + ret.substr(k, ret.size()); } else if(IsLower(ret[k])) { ret = ret.substr(0, k) + 'a' + ret.substr(k, ret.size()); } else { assert(IsNum(ret[k])); ret = ret.substr(0, k) + '1' + ret.substr(k, ret.size()); } } } return ret; } int main() { /* printf("ASCIIs:/n"); for(int i=0; i<256; ++i) { printf("%d --> %c/n", i, char(i)); } while(true) {} */ int cs; scanf("%d", &cs); while(cs-- > 0) { char buf[1024]; int n; scanf("%s%d", buf, &n); string s = buf; while(n-- > 0) { s = Successor(s); printf("%s/n", s.c_str()); } printf("/n"); } return 0; }