#include <cstdio>
#include <cstdlib>
struct node
{
struct node * parent;
struct node * children[10]; //to indicate which number it is (0-9)
bool isLeaf;
};
bool Insert(struct node *trieTree, char number[])
{
int i=0;
bool result = true;
struct node *temp = trieTree;
while(number[i] != '\0' )
{
//case 1: 911 comes after 9112
//case 2: 9112 comes after 911
char n = number[i];
if(trieTree->children[n - '0'] == NULL)
{
struct node *q = new node();
temp->children[n - '0'] = q;
//= (struct node *) calloc(1,sizeof (struct node));
temp->children[n-'0']->parent = temp;
temp->children[n-'0']->isLeaf = false;
}
temp = temp->children[n-'0'];
if(temp->isLeaf == true) //9112 comes after 911
{
result = false;
return result;
}
i++;
}
//911 comes after 9112
for(int j=0; j<9; j++)
{
if(temp->children[j] != NULL)
{
result = false;
return result;
}
}
temp->isLeaf = true;
return result;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
struct node *trieTree = new node();
// (struct node *) calloc(1,sizeof(struct node));
char number[10];
bool result = true;
for(int i=0; i<n; i++)
{
scanf("%s",number);
if(!Insert(trieTree, number)) result = false;
}
if(result) printf("YES\n");
else printf("NO\n");
free(trieTree);
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CgpzdHJ1Y3Qgbm9kZQp7CglzdHJ1Y3Qgbm9kZSAqIHBhcmVudDsKCXN0cnVjdCBub2RlICogY2hpbGRyZW5bMTBdOyAvL3RvIGluZGljYXRlIHdoaWNoIG51bWJlciBpdCBpcyAoMC05KQoJYm9vbCBpc0xlYWY7Cn07Cgpib29sIEluc2VydChzdHJ1Y3Qgbm9kZSAqdHJpZVRyZWUsIGNoYXIgbnVtYmVyW10pCnsKCWludCBpPTA7Cglib29sIHJlc3VsdCA9IHRydWU7CgkKCXN0cnVjdCBub2RlICp0ZW1wID0gdHJpZVRyZWU7CgkKCXdoaWxlKG51bWJlcltpXSAhPSAnXDAnICkKCXsKCQkvL2Nhc2UgMTogOTExIGNvbWVzIGFmdGVyIDkxMTIKCQkvL2Nhc2UgMjogOTExMiBjb21lcyBhZnRlciA5MTEKCQoJCWNoYXIgbiA9IG51bWJlcltpXTsKCQkKCQlpZih0cmllVHJlZS0+Y2hpbGRyZW5bbiAtICcwJ10gPT0gTlVMTCkKCQl7CgkJCXN0cnVjdCBub2RlICpxID0gbmV3IG5vZGUoKTsKCQkJdGVtcC0+Y2hpbGRyZW5bbiAtICcwJ10gPSBxOwoJCQkvLz0gKHN0cnVjdCBub2RlICopIGNhbGxvYygxLHNpemVvZiAoc3RydWN0IG5vZGUpKTsKCQkJdGVtcC0+Y2hpbGRyZW5bbi0nMCddLT5wYXJlbnQgPSB0ZW1wOwoJCQl0ZW1wLT5jaGlsZHJlbltuLScwJ10tPmlzTGVhZiA9IGZhbHNlOwoJCX0KCQkKCQl0ZW1wID0gdGVtcC0+Y2hpbGRyZW5bbi0nMCddOwoJCQoJCWlmKHRlbXAtPmlzTGVhZiA9PSB0cnVlKSAvLzkxMTIgY29tZXMgYWZ0ZXIgOTExCgkJewoJCQlyZXN1bHQgPSBmYWxzZTsKCQkJcmV0dXJuIHJlc3VsdDsKCQl9CgkJCgkJaSsrOwoJfQoJCgkvLzkxMSBjb21lcyBhZnRlciA5MTEyCglmb3IoaW50IGo9MDsgajw5OyBqKyspCgl7CgkJaWYodGVtcC0+Y2hpbGRyZW5bal0gIT0gTlVMTCkKCQl7CgkJCXJlc3VsdCA9IGZhbHNlOwoJCQlyZXR1cm4gcmVzdWx0OwoJCX0KCX0KCQoJdGVtcC0+aXNMZWFmID0gdHJ1ZTsKCXJldHVybiByZXN1bHQ7Cn0KCmludCBtYWluKCkKewoJaW50IFQ7CglzY2FuZigiJWQiLCZUKTsKCXdoaWxlKFQtLSkKCXsKCQlpbnQgbjsKCQlzY2FuZigiJWQiLCZuKTsKCQkJCgkJc3RydWN0IG5vZGUgKnRyaWVUcmVlID0gbmV3IG5vZGUoKTsKCQkvLyAoc3RydWN0IG5vZGUgKikgY2FsbG9jKDEsc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgkJY2hhciBudW1iZXJbMTBdOwoJCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKCQkKCQlmb3IoaW50IGk9MDsgaTxuOyBpKyspCgkJewoJCQlzY2FuZigiJXMiLG51bWJlcik7CQoJCQkKCQkJaWYoIUluc2VydCh0cmllVHJlZSwgbnVtYmVyKSkgcmVzdWx0ID0gZmFsc2U7CgkJfQoJCQoJCWlmKHJlc3VsdCkgcHJpbnRmKCJZRVNcbiIpOwoJCWVsc2UgcHJpbnRmKCJOT1xuIik7CgkJCgkJZnJlZSh0cmllVHJlZSk7Cgl9Cn0=