#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string.h>
#include <math.h>
#include <limits.h>
#include <sstream>
#include <vector>
using namespace std;
#define rep(i,a,N) for(int i=a;i<N;++i)
vector<int> result;
int Outer(char x){
return x-65;
}
int Inner(char x){
return x-65+5;
}
struct Out_Map{
int x,y,z;
}out[5];
struct Inn_Map{//map for inner graph
int x,y,z;
}inn[10];
void Initialize(){//to initialize the graph
out[0].x=1;
out[0].y=4;
out[0].z=5;
out[1].x=0;
out[1].y=2;
out[1].z=6;
out[2].x=1;
out[2].y=3;
out[2].z=7;
out[3].x=2;
out[3].y=4;
out[3].z=8;
out[4].x=0;
out[4].y=8;
out[4].z=9;
inn[9].x=4;
inn[9].y=6;
inn[9].z=7;
inn[5].x=0;
inn[5].y=7;
inn[5].z=8;
inn[6].x=1;
inn[6].y=8;
inn[6].z=9;
inn[7].x=2;
inn[7].y=5;
inn[7].z=9;
inn[8].x=3;
inn[8].y=5;
inn[8].z=6;
}
bool isPresent(int tmp,int code){
if(tmp<5){
if(out[tmp].x==code || out[tmp].y==code || out[tmp].z==code)
return true;
return false;
}
else{
if(inn[tmp].x==code || inn[tmp].y==code || inn[tmp].z==code)
return true;
return false;
}
}
bool Calc(int d,string str){//d to check whether outer or inner
bool flag=true;
int code;
if(d==0)
code=Outer(str.at(0));
else
code=Inner(str.at(0));
result.push_back(code);
rep(i,1,str.size()){
//printf("%d\n",code );
if(isPresent(code,Outer(str.at(i))))
code=Outer(str.at(i));
else if(isPresent(code,Inner(str.at(i))))
code=Inner(str.at(i));
else{
flag=false;
break;
}
result.push_back(code);
}
return flag;
}
void Print(){
rep(i,0,result.size())
cout<<result[i];
printf("\n");
}
int main(){
Initialize();
int T;
string str;
scanf("%d",&T);
while(T--){
cin>>str;
if(str.size()==1)
printf("%d\n",Outer(str.at(0)));
else{
if(Calc(0,str)){
Print();
result.clear();
}
else{
//printf("now clearing\n");
result.clear();
if(Calc(1,str)){
Print();
result.clear();
}
else{
printf("-1\n");
result.clear();
}
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8bGltaXRzLmg+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIHJlcChpLGEsTikgZm9yKGludCBpPWE7aTxOOysraSkKdmVjdG9yPGludD4gcmVzdWx0OwppbnQgT3V0ZXIoY2hhciB4KXsKCXJldHVybiB4LTY1Owp9CmludCBJbm5lcihjaGFyIHgpewoJcmV0dXJuIHgtNjUrNTsKfQoKc3RydWN0IE91dF9NYXB7CglpbnQgeCx5LHo7Cn1vdXRbNV07CgpzdHJ1Y3QgSW5uX01hcHsvL21hcCBmb3IgaW5uZXIgZ3JhcGgKCWludCB4LHksejsKfWlublsxMF07Cgp2b2lkIEluaXRpYWxpemUoKXsvL3RvIGluaXRpYWxpemUgdGhlIGdyYXBoCglvdXRbMF0ueD0xOwoJb3V0WzBdLnk9NDsKCW91dFswXS56PTU7CgkKCW91dFsxXS54PTA7CglvdXRbMV0ueT0yOwoJb3V0WzFdLno9NjsKCQoJb3V0WzJdLng9MTsKCW91dFsyXS55PTM7CglvdXRbMl0uej03OwoKCW91dFszXS54PTI7CglvdXRbM10ueT00OwoJb3V0WzNdLno9ODsKCglvdXRbNF0ueD0wOwoJb3V0WzRdLnk9ODsKCW91dFs0XS56PTk7CgoJaW5uWzldLng9NDsKCWlubls5XS55PTY7Cglpbm5bOV0uej03OwoKCWlubls1XS54PTA7Cglpbm5bNV0ueT03OwoJaW5uWzVdLno9ODsKCQoJaW5uWzZdLng9MTsKCWlubls2XS55PTg7Cglpbm5bNl0uej05OwoKCWlubls3XS54PTI7Cglpbm5bN10ueT01OwoJaW5uWzddLno9OTsKCglpbm5bOF0ueD0zOwoJaW5uWzhdLnk9NTsKCWlubls4XS56PTY7Cgp9Cgpib29sIGlzUHJlc2VudChpbnQgdG1wLGludCBjb2RlKXsKCWlmKHRtcDw1KXsKCQlpZihvdXRbdG1wXS54PT1jb2RlIHx8IG91dFt0bXBdLnk9PWNvZGUgfHwgb3V0W3RtcF0uej09Y29kZSkKCQkJcmV0dXJuIHRydWU7CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZXsKCQlpZihpbm5bdG1wXS54PT1jb2RlIHx8IGlublt0bXBdLnk9PWNvZGUgfHwgaW5uW3RtcF0uej09Y29kZSkKCQkJcmV0dXJuIHRydWU7CgkJcmV0dXJuIGZhbHNlOwoJfQp9Cgpib29sIENhbGMoaW50IGQsc3RyaW5nIHN0cil7Ly9kIHRvIGNoZWNrIHdoZXRoZXIgb3V0ZXIgb3IgaW5uZXIKCWJvb2wgZmxhZz10cnVlOwoJaW50IGNvZGU7CglpZihkPT0wKQoJCWNvZGU9T3V0ZXIoc3RyLmF0KDApKTsKCWVsc2UKCQljb2RlPUlubmVyKHN0ci5hdCgwKSk7CglyZXN1bHQucHVzaF9iYWNrKGNvZGUpOwoJcmVwKGksMSxzdHIuc2l6ZSgpKXsKCQkvL3ByaW50ZigiJWRcbiIsY29kZSApOwoJCWlmKGlzUHJlc2VudChjb2RlLE91dGVyKHN0ci5hdChpKSkpKQoJCQljb2RlPU91dGVyKHN0ci5hdChpKSk7CgkJZWxzZSBpZihpc1ByZXNlbnQoY29kZSxJbm5lcihzdHIuYXQoaSkpKSkKCQkJCQljb2RlPUlubmVyKHN0ci5hdChpKSk7CgkJZWxzZXsKCQkJZmxhZz1mYWxzZTsgCgkJCWJyZWFrOwoJCX0KCQlyZXN1bHQucHVzaF9iYWNrKGNvZGUpOwoJfQoKcmV0dXJuIGZsYWc7Cn0KCnZvaWQgUHJpbnQoKXsKCXJlcChpLDAscmVzdWx0LnNpemUoKSkKCQljb3V0PDxyZXN1bHRbaV07CglwcmludGYoIlxuIik7Cn0KaW50IG1haW4oKXsKCUluaXRpYWxpemUoKTsKCWludCBUOwoJc3RyaW5nIHN0cjsKCXNjYW5mKCIlZCIsJlQpOwoJd2hpbGUoVC0tKXsKCQljaW4+PnN0cjsKCQlpZihzdHIuc2l6ZSgpPT0xKQoJCQlwcmludGYoIiVkXG4iLE91dGVyKHN0ci5hdCgwKSkpOwoJCWVsc2V7CgkJCWlmKENhbGMoMCxzdHIpKXsJCQkKCQkJCVByaW50KCk7CgkJCQlyZXN1bHQuY2xlYXIoKTsKCQkJfQoJCQllbHNlewoJCQkJLy9wcmludGYoIm5vdyBjbGVhcmluZ1xuIik7CgkJCQlyZXN1bHQuY2xlYXIoKTsKCQkgCQlpZihDYWxjKDEsc3RyKSl7CgkJCQkJUHJpbnQoKTsKCQkJCQlyZXN1bHQuY2xlYXIoKTsKCQkgCQl9CgkJCQllbHNlewoJCQkJCXByaW50ZigiLTFcbiIpOwoJCQkJCXJlc3VsdC5jbGVhcigpOwkJCgkJCQl9CgkJCX0KCQkKCQl9CQoJCgl9CglyZXR1cm4gMDsKfQo=