/* String processing */# include <stdio. h> # include <string. h> # include <stdlib. h> # include <algorithm> # include <iostream> # include <queue> # include <map> # include <stack> # include <set> # include <math. h> using namespace std; typedef long int64; // typedef _ int64 int64; typedef pair <int64, int64> PII; # define MP (a, B) make_pair (a), (B) const int maxn = 115; const int inf = 0x7fffffff; const double pi = acos (-1.0); const Double eps = 1e-8; struct Node {char s [maxn]; int cnt;} a [maxn], q [maxn]; int Find (char s [], int n) {for (int I = 1; I <n; I ++) {if (strcmp (s, a [I]. s) = 0) return I;} return-1;} bool cmp (Node a, Node B) {if (. cnt! = B. cnt) return. cnt> B. cnt; else {if (strcmp (. s, B. s) <= 0) return true; else return false ;}} int main () {int T; scanf ("% d", & T); while (T --) {int n; scanf ("% d", & n); // init (); char ID [maxn], Web [maxn]; // char L [maxn]; // char R [maxn]; int Cnt = 1; // count different URLs int cc; while (n --) {scanf ("% s", ID, web); // cin> ID> Web; cc = Find (Web, Cnt); if (ID [0] = 'V ') {if (cc =-1) {strcpy (a [Cnt]. s, Web); a [Cnt]. cnt = 1; Cnt ++; // Printf ("Add success \ n");} else {a [cc]. cnt ++ ;}} else {// sort (a + 1, a + 1 + Cnt, cmp); // memset (L, '\ 0 ', sizeof (L); // memset (R, '\ 0', sizeof (R); int pp = 0; for (int k = 1; k <Cnt; k ++) {bool f = false; for (int I = 0; Web [I]! = '\ 0'; I ++) {if (Web [I]! = A [k]. s [I]) {f = true; break;} if (f = false) {// printf ("% s \ n", a [k]. s); q [pp ++] = a [k] ;}} sort (q, q + pp, cmp); for (int I = 0; I <pp; I ++) {printf ("% s \ n", q [I]. s) ;}printf ("\ n") ;}} return 0 ;}