internal IEnumerable<string> CutAll(string sentence)
{
var dag = GetDag(sentence);
var words = new List<string>();
var lastPos = -1;
foreach (var pair in dag)
{
var k = pair.Key;
var nexts = pair.Value;
if (nexts.Count == 1 && k > lastPos)
{
words.Add(sentence.Substring(k, nexts[0] + 1 - k));
lastPos = nexts[0];
}
else
{
foreach (var j in nexts)
{
if (j > k)
{
words.Add(sentence.Substring(k, j + 1 - k));
lastPos = j;
}
}
}
}
return words;
}