IEnumerable <string> SuffixesFrom(IDawgReader reader, StringBuilder builder) { if (reader.Current == 0) { yield break; } builder.Append(_charset[reader.SymbolId]); if (reader.IsEndOfWord) { yield return(builder.ToString()); } if (reader.FirstChild != 0) { var current = reader.Current; if (!reader.MoveToFirstChild()) { yield break; } foreach (var word in SuffixesFrom(reader, builder)) { yield return(word); } reader.MoveToNode(current); } builder.Length--; if (reader.IsLastSibling) { yield break; } reader.MoveNextSibling(); foreach (var word in SuffixesFrom(reader, builder)) { yield return(word); } }