#include<iostream>
#include<stdio.h>#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn =30;
int pre[maxn],in[maxn],out[maxn];
int n;
int num, len; //单词个数,每个单词长度
int start, End; //转化为边
char s[1010];
int innum, outnum; //记录入度出度不相等顶点个数
int root; //根结点个数
bool flag; //判断连通性
bool flag1; //判断入度和出度是否是1或者0
bool vis[maxn];
int ffind(int x)
{
return x == pre[x]?x:pre[x];
}
void Union(int x,int y)
{
int roox, rooy;
roox = ffind(x);
rooy = ffind(y);
if(roox != rooy)
pre[roox] = rooy;
}
int main()
{
int t;
scanf("%d",&t);
for(int i = 1; i <= t;i++)
{
memset(vis,0,sizeof(vis));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
for(int i = 0 ; i <maxn; i++)
pre[i] = i;
innum = outnum = root = 0;
flag1 =flag = 1;
scanf("%d",&n);
for(int i = 1; i<= n;i++)
{
scanf("%s",s);
len = strlen(s);
start = s[0]-'a'+1;
End = s[len-1]-'a'+1;
vis[start] = 1;
vis[End] = 1;
out[start]++;
in[End]++;
Union(start,End);
}
for(int i = 0 ;i <maxn; i++)
{
if(vis[i])
{
if(pre[i] == i)
root++;
if(in[i]!=out[i])
{
if(in[i] - out[i] == 1)
outnum++;
else
if(out[i]-in[i] == 1)
innum++;
else flag1 = 0;
}
}
if(root>1){
flag = 0;
break;}
}
if((flag&&flag1&&outnum == 0&&innum==0)||(flag&&flag1&&outnum==1&&innum ==1))
printf("Ordering is possible.\n");
else
printf("The door cannot be opened.\n");
}
return 0;
}