/**
* url : http://acm.hdu.edu.cn/showproblem.php?pid=1930
* stratege : 解一元线性同余方程组, 扩展欧几里得
* Author: johnsondu
* Status: johnsondu 0MS 284K 2207B C++ 2012-08-19 13:13:15
* Trick: There will be no blank in the end of the text
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#include <map>
#include <string>
#include <iomanip>
using namespace std;
const int N = 2005 ;
int key[N], num, n ;
int str[N] ;
int res[N] ;
int r[N] ;
void input ()
{
int i ;
scanf ("%d", &n) ;
memset (res, 0, sizeof (res)) ;
memset (str, 0, sizeof (str)) ;
memset (r, 0, sizeof (r)) ;
memset (key, 0, sizeof (key)) ;
num = 0 ;
for (i = 0; i < 4; i ++) // key
scanf ("%d", &key[i]) ;
for (i = 0; i < n; i ++) // the set of remainder
scanf ("%d", &str[i]) ;
}
void exGcd (int a, int b, int &d, int &x, int &y) // Extended_Euclid
{
if (b == 0)
{
d = a ;
x = 1 ;
y = 0 ;
return ;
}
exGcd (b, a%b, d, x, y) ;
int tmp = x ;
x = y ;
y = tmp - (a/b)*y ;
}
void getNum ()
{
int i, j ;
int a, b, c, d, x, y ;
for (i = 0; i < n; i ++)
{
r[3] = str[i] % 100 ; //transform the set of remainder into the
r[2] = (str[i]%10000)/100 ; //single remainder of the key
r[1] = (str[i]%1000000)/ 10000 ;
r[0] = str[i]/1000000;
int ta = key[0] ;
int tr = r[0] ;
//mission: x = r1 (mod a1), x = r2 (mod a2), ..., find x ;
for (j = 1; j < 4; j ++) //a1, a2, ... are key[i], r1, r2, ... are r[i]
{ //find the str[i]'s value
a = ta, b = key[j] ;
c = r[j] - tr ;
exGcd (a, b, d, x, y) ;
int t = b/d ;
x = (x*(c/d)%t + t) % t ;
tr = ta*x + tr ;
ta = ta * (key[j]/d) ;
}
res[i] = tr ;
}
}
void output ()
{
int i ;
int a, b, c ;
char destr [10005] ;
int len = 0 ;
for (i = 0; i < n; i ++)
{
a = res[i] / 10000 ;
b = (res[i] % 10000) / 100 ;
c = res[i] % 100 ;
if (a != 27)
destr[len++] = 'A' + a - 1 ;
else destr[len++] = ' ' ;
if (b != 27)
destr[len++] = 'A' + b - 1 ;
else destr[len ++] = ' ' ;
if (c != 27)
destr[len++] = 'A' + c - 1 ;
else destr[len ++] = ' ' ;
}
while (destr[len-1] == ' ') //ignore the blank in the end of text.
{
len -- ;
}
for (i = 0; i < len; i ++)
printf ("%c", destr[i]) ;
printf ("\n") ;
}
int main ()
{
int tcase ;
scanf ("%d", &tcase) ;
while (tcase --)
{
input () ;
getNum () ;
output () ;
}
return 0 ;
}