a trie data structure