1 #include <bits/stdc++.h>
2
3 const int maxn = 28;
4 using namespace std;
5
6 int G[maxn][maxn];
7 int tmpG[maxn][maxn];
8 int known[maxn];
9 void DFS(int s)
10 {
11 for(int u=0; u<maxn; u++)
12 {
13 if(!known[u]&&tmpG[s][u])
14 {
15 known[u] = 1;
16 DFS(u);
17 }
18 }
19 return ;
20 }
21
22 bool bing(int vnum)
23 {
24 int count = 0;
25 DFS(0);
26 for(int i = 0;i < maxn;i ++)
27 {
28 if(known[i]>0)
29 count ++;
30 }
31 return count==vnum;
32 }
33
34 int main()
35 {
36 int T;
37 cin >> T;
38 while(T --)
39 {
40 memset(G,0,sizeof(G));
41 memset(tmpG,0,sizeof(tmpG));
42 memset(known,0,sizeof(known));
43 int vnum = 0;
44 int v[maxn] {0};
45 int n;
46 cin >> n;
47
48 int out[maxn] {0};
49 int in[maxn] {0};
50
51 vector<int> diff;
52 while(n --)
53 {
54 string tmp;
55 cin >> tmp;
56 G[tmp[0]-'a'][tmp[tmp.size()-1]-'a'] ++;
57 tmpG[tmp[0]-'a'][tmp[tmp.size()-1]-'a'] = 1;
58 tmpG[tmp[tmp.size()-1]-'a'][tmp[0]-'a'] = 1;
59 if(v[tmp[0]-'a']==0)
60 {
61 v[tmp[0]-'a'] = 1;
62 vnum ++;
63 }
64 if(v[tmp[tmp.size()-1]-'a']==0)
65 {
66 v[tmp[tmp.size()-1]-'a'] = 1;
67 vnum ++;
68 }
69 }
70
71 if(!bing(vnum))
72 {
73 cout << "The door cannot be opened." << endl;
74 continue;
75 }
76
77 for(int i = 0; i < maxn; i ++)
78 {
79 int sum = 0;
80 for(int j = 0; j < maxn; j ++)
81 {
82 sum += G[i][j];
83 }
84 in[i] = sum;
85 }
86
87 for(int i = 0; i < maxn; i ++)
88 {
89 int sum = 0;
90 for(int j = 0; j < maxn; j ++)
91 {
92 sum += G[j][i];
93 }
94 out[i] = sum;
95 }
96
97 for(int i = 0; i < maxn; i ++)
98 {
99 if(in[i]!=out[i])
100 diff.push_back(in[i]-out[i]);
101 }
102
103 if(diff.size()==0)
104 {
105 cout << "Ordering is possible." << endl;
106 continue;
107 }
108 else if(diff.size()==2)
109 {
110 if(diff[0]==-1&&diff[1]==1||diff[0]==1&&diff[1]==-1)
111 {
112 cout << "Ordering is possible." << endl;
113 continue;
114 }
115 }
116 cout << "The door cannot be opened." << endl;
117 }
118 return 0;
119 }