#include <cstring>
#include <iostream>
using namespace std;
int visited[26],edges[26][26];
void DFS(int v){
visited[v]=1;
for (int w=0;w<26;w++){
if (edges[v][w]!=0 || edges[w][v]!=0){
if (v!=w && visited[w]==0) DFS(w);
}
}
}
bool isConnected(){
int cp=0;
for (int v=0;v<26;v++){
bool hasDegree=false;
for (int w=0;w<26;w++){
if (v==w) continue;
if (edges[v][w]!=0 || edges[w][v]!=0){
hasDegree=true;
break;
}
}
if (hasDegree){
if (cp==0){
DFS(v);
cp++;
}
else if (visited[v]==1) {}
else return false;
}
}
if (cp==1) return true;
return false;
}
void init(){
for (int i=0;i<26;i++){
visited[i]=0;
for (int j=0;j<26;j++){
edges[i][j]=0;
}
}
}
bool isEuler(){
if (!isConnected()) return false;
int err=0,start=0,end=0;
for (int v=0;v<26;v++){
if (err) break;
int inDeg=0,outDeg=0;
for (int w=0;w<26;w++){
if (v==w) continue;
if (edges[v][w]!=0) outDeg+=edges[v][w];
if (edges[w][v]!=0) inDeg+=edges[w][v];
}
// cout << "v=" << v << " inDeg=" << inDeg << " outDeg=" << outDeg << endl;
switch(inDeg-outDeg){
case 0: break;
case 1:
end++;
if (end>1) err=1;
break;
case -1:
start++;
if (start>1) err=1;
break;
default: err=1;
}
}
if (err) return false;
else if (start==0 && end==0 || start==1 && end==1) return true;
else return false;
}
void inputCheck(){
init();
int wn;
char buf[1024];
cin >> wn;
for (int i=0;i<wn;i++){
cin >> buf;
int v=buf[0]-'a';
int w=buf[strlen(buf)-1]-'a';
if (v!=w) {edges[v][w]++;}
}
if (isEuler())
cout << "Ordering is possible." << endl;
else
cout << "The door cannot be opened." << endl;
}
int main(){
int cn; // number of cases
cin >> cn;
for (int i=0;i<cn;i++)
inputCheck();
return 0;
}