Изменения
→Наивный алгоритм
     '''int''' v <span style="color:Green">// индекс текущей позиции </span>
 go[0] = '''new''' Vertex<span style="color:Green">// массив из пустых Vertex (можно все поля положить -1), размер массива -- количество символов в алфавите </span>
 count = 0        <span style="color:Green">// номер последней вершины, созданной в дереве (глобальная переменная)</span>
 '''for''' i = 0 '''to''' n   <span style="color:Green">// для каждого символа строки</span>
             finish = go[cur][s[l]].r
             hasCut = ''false''
             '''for''' j = start '''to''' finish       and l + j - start < n      <span style="color:Green">// для каждого символа на ребре из текущей вершины</span>
                 '''if''' (s[l + j - start] != s[j]) <span style="color:Green">// если нашли не совпадающий символ</span>
                     <span style="color:Green">// создаем вершину на ребре</span>
                     old = go[cur][s[l]]
                     createVertex(cur, l, j - 1)
                     go[count][s[j]].v = old
                     go[count][s[j]].r l = j                     go[count][s[j]].l r = finish
                     createVertex(count, l + j - start, r)
                     hasCut = ''true''
