#include #include #include using namespace std; int main() { int K; cin >> K; for (int set = 1; set <= K; set++) { printf("Data Set %d:\n", set); long long n; string p; cin >> n >> p; vector symbols; map char_from_symbol; int symbol_from_char[26]; for (long long base = 2; base <= 1e6; base++) { long long ncopy = n; symbols.clear(); while (ncopy > 0) { symbols.push_back(ncopy % base); ncopy /= base; } if (symbols.size() < p.size()) break; char_from_symbol.clear(); for (int i = 0; i < 10; i++) symbol_from_char[i] = -1; bool matched = true; for (int i = symbols.size() - 1, char_pos = 0; i >= 0; i--, char_pos++) { char pchar = p[char_pos % p.size()]; if (symbols[i] == symbol_from_char[pchar - 'a']) continue; if (-1 == symbol_from_char[pchar - 'a'] && 0 == char_from_symbol.count(symbols[i])) { symbol_from_char[pchar - 'a'] = symbols[i]; char_from_symbol.insert(make_pair(symbols[i], pchar)); continue; } matched = false; break; } if (matched) { printf("%d\n%d", (int)base, symbols[symbols.size() - 1]); for (int i = symbols.size() - 2; i >= 0; i--) printf(" %d", symbols[i]); goto DONE; } } printf("No such base."); DONE: printf("\n\n"); } }