#include <bits/stdc++.h>
using
namespace
std;
const
int
ALPHABET_SIZE = 26;
struct
TrieNode {
struct
TrieNode* children[ALPHABET_SIZE];
bool
isEndOfWord;
};
struct
TrieNode* getNode(
void
)
{
struct
TrieNode* pNode =
new
TrieNode;
pNode->isEndOfWord =
false
;
for
(
int
i = 0; i < ALPHABET_SIZE; i++)
pNode->children[i] = NULL;
return
pNode;
}
void
insert(
struct
TrieNode* root, string key)
{
struct
TrieNode* pCrawl = root;
for
(
int
i = 0; i < key.length(); i++) {
int
index = key[i] -
'a'
;
if
(!pCrawl->children[index])
pCrawl->children[index] = getNode();
pCrawl = pCrawl->children[index];
}
pCrawl->isEndOfWord =
true
;
}
bool
containsAll(TrieNode* root)
{
for
(
int
i = 0; i < 26; i++) {
if
(root->children[i] == NULL)
return
false
;
}
return
true
;
}
int
main()
{
string keys[] = { "element", "fog", "great", "hi", "ok",
"ios", "parrot", "quiz", "kim", "mango", "nature",
"apple", "ball", "cat", "dog", "lime", "ruby",
"shine", "tinkter", "ultra", "volly", "wow",
"xerox", "yak", "zenon", "joke" };
int
n =
sizeof
(keys) /
sizeof
(keys[0]);
struct
TrieNode* root = getNode();
for
(
int
i = 0; i < n; i++)
insert(root, keys[i]);
if
(containsAll(root))
cout << "Yes";
else
cout << "No";
return
0;
}