#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <algorithm>
#include <string>
//#include <cstdlib>
using namespace std;
//谢谢博友好文章抄博友程序
struct da{
int x;
int y;
};
map<int,da> mp1;
bool op(da a,da b)
{
if(a.x==b.x)
{
return a.y<b.y;
}else
{
return a.x<b.x;
}
}
int main()
{
da t;
t.x=-1;
t.y=1;
mp1[0]=t;//a
t.x=-1;
t.y=0;
mp1[1]=t;//b
t.x=0;
t.y=-1;
mp1[2]=t;//c
t.x=1;
t.y=-1;
mp1[3]=t;//d
t.x=1;
t.y=0;
mp1[4]=t;//e
t.x=0;
t.y=1;
mp1[5]=t;//f
int n;
scanf("%d%*c",&n);//
char ts1[1024];//抄博友程序
char ts2[1024];
char ts3[1024];
for(int iii=0;iii<n;iii++)
{
memset(ts1,0,sizeof(ts1));
memset(ts2,0,sizeof(ts2));
memset(ts3,0,sizeof(ts3));
string s1,s2,s;
s1.clear();
s2.clear();
s.clear();
gets(ts1);
s1=ts1;//
gets(ts2);//
s2=ts2;//
gets(ts3);//
if((s1.size()==0)&&(s2.size()==0))
{
cout<<"true"<<endl;
continue;
}
if(s1.size()!=s2.size())
{
cout<<"false"<<endl;
continue;
}
da sta;
sta.x=2000;
sta.y=2000;
vector<da> ve;
ve.clear();
ve.push_back(sta);
for(int i=0;i<s1.size();i++)
{
da t=mp1[s1[i]-'a'];
sta.x=sta.x+t.x;
sta.y=sta.y+t.y;
ve.push_back(sta);
}
sort(ve.begin(),ve.end(),op);
vector<da> ch[6];
for(int i=0;i<6;i++)
{
ch[i].clear();
}
int ff=0;
for(int i=0;i<6;i++)
{
for(int k=0;k<ve.size();k++)//抄博友程序 重要
{
ch[i].clear();
da ks;
ks.x=ve[k].x;//从任意个点开始
ks.y=ve[k].y;
ch[i].push_back(ks);
for(int j=0;j<s2.size();j++)
{
da t=mp1[(s2[j]-'a'+i)%6];
ks.x=ks.x+t.x;
ks.y=ks.y+t.y;
ch[i].push_back(ks);
}
sort(ch[i].begin(),ch[i].end(),op);
int flag=1;
for(int j=0;j<ve.size();j++)
{
if(ve[j].x!=ch[i][j].x||ve[j].y!=ch[i][j].y)
{
flag=0;
break;
}
}
if(flag==1)
{
ff=1;
break;
}
}
if(ff==1)
{
break;
}
}
if(ff==0)
{
cout<<"false"<<endl;
}else
{
cout<<"true"<<endl;
}
}
return 0;
}