#include <iostream>
#include <cstring>
using namespace std;
const int N=30; // 26个字母的顶点
int din[N], dout[N]; // 顶点的出度和入度
int g[N][N];
int T, n, cnt;
void dfs(int u){
for(int i=0; i<26; ++i){
if(g[u][i]){
++cnt;
--g[u][i];
dfs(i);
}
}
}
int main(){
string word;
cin>>T;
while(T--){
cnt=0;
cin>>n;
memset(din, 0x00, sizeof din);
memset(dout, 0x00, sizeof dout);
memset(g, 0x00, sizeof g);
for(int i=0; i<n; ++i){
cin>>word;
int x=word[0]-'a';
int y=word.back()-'a';
// 建立一条由x指向y的有向边
dout[x]++;
din[y]++;
g[x][y]++;
}
// 判断度数
int s=0, e=0;
bool ok=true;
for(int i=0; i<26; ++i)
if(din[i]!=dout[i]){
if(din[i]==dout[i]+1) ++e;
else if(din[i]+1==dout[i]) ++s;
else {ok=false; break;}
}
// 有向图Euler path判定
// 或者起点和终点数量都是0(形成环)
// 或者起点和终点数量都是1
if(!(!s&&!e||s==1 && e==1)) ok=false;
// 判断连通性
int start=0;
while(!dout[start]) ++start;
for(int i=start; i<26; ++i){
if(dout[i]==din[i]+1) {start=i; break;}
}
dfs(start);
if(cnt!=n) ok=false;
if(ok) cout<<"Ordering is possible."<<endl;
else cout<<"The door cannot be opened."<<endl;
}
return 0;
}