Rather than the suffix "S"["i".."n"], Weiner stored in his trie the "prefix identifier" for each position, that is, the shortest string starting at "i" and occurring only once in "S". His "Algorithm D" takes an uncompressed trie for "S"["k"+1.."n"] and extends it into a trie for "S"["k".."n"]. This way, starting from the trivial trie for "S"["n".."n"], a trie for "S"[1.."n"] can be built by "n"-1 successive calls to Algorithm D; however, the overall run time is "O"("n"2). Weiner's "Algorithm B" maintains several auxiliary data structures, to achieve an over all run time linear in the size of the constructed trie. The latter can still be "O"("n"2) nodes, e.g. for "S" = anbnanbn$. Weiner's "Algorithm C" finally uses compressed tries to achieve linear overall storage size and run time.