11362

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

struct node{
	bool endofmark;
	node *next[11];

	node()
	{
		endofmark=false;
		for(int i=0;i<10;i++)
		next[i]=NULL;
	}
}*root;

int insert(string str)
{
	node *curr=root;
	int id;
	int created=0;
	for(int i=0;i<str.size();i++)
	{
		id=str[i]-'0';
		if(curr->next[id]==NULL)
		{
			curr->endofmark=false;
			curr->next[id]=new node();
			created =1;
	    }
		curr=curr->next[id];
	}
	if(created==0)
	curr->endofmark=false;
	else
	curr->endofmark=true;

	return created;
}

bool search(string str)
{
	node *curr=root;
	int len=str.size();
	int id;
	for(int i=0;i<len-1;i++)
	{
		id=str[i]-'0';
		curr=curr->next[id];
		curr->endofmark=false;
	}
	if(curr->next[str[len-1]-'0'])
	curr=curr->next[str[len-1]-'0'];
	for(int i=0;i<=9;i++)
	{
		if(curr->next[i])
		return false;
	}

	return true;
}


void delet(node *curr)
{
	for(int i=0;i<10;i++)
	{
		if(curr->next[i])
		delet(curr->next[i]);
	}
	delete(curr);
}


int main()
{
	int t,n,d,consist;
	vector<string> VB;
	string str;
	cin>>t;

	while(t--)
	{
		cin>>n;
		root=new node();
		consist=0;
		d=0;
		for(int i=0;i<n;i++)
		{
			cin>>str;
			VB.push_back(str);
			d = insert(str);
			if(d==0)
			consist=-1;
		}

	    if(consist==-1)
	    {
          cout<<"NO\n";
          VB.clear();
		 delet(root);
	     consist=0;
          continue;
        }
		for(int i=0;i<n;i++)
		{
			if(!search(VB[i]))
			{
				cout<<"NO\n";
				consist=-1;
				break;
			}
		}

		if(consist!=-1)
		cout<<"YES\n";

		VB.clear();
		delet(root);
		consist=0;
	}

	return 0;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *