public void add(List<K> elements, V value) {
		TrieNode<K, V> parent = this.root;
		TrieNode<K, V> node = null;
		Iterator<K> iter = elements.iterator();
		/**
		 * traverse each element of elements step by step and, construct node in
		 * trie dictionary tree. *
		 */
		while (iter.hasNext()) {
			K key = (K) iter.next();
			node = parent.contain(key);
			if (node == null) {
				TrieNode<K, V> curr = new TrieNode<K, V>(key);
				parent.addChild(key, curr);
				parent = curr;
			} else {
				parent = node;
			}
		}
		/**
		 * Store value into leaf child, which means this trie dictionary
		 * contains this word. error handling. should not happen for ever.
		 */
		if (parent.getValue() != null && !parent.getValue().equals(value)) {
			LOG.info("inconsistent value,new value will overwrite old one!");
		}
		parent.setValue(value);

	}