private void AddPrefix(Suffix active, int indexOfLastCharacter)
        {
            int parentNode;
             int lastParentNode = -1;

             for (;;)
             {
            Edge edge;
            parentNode = active.originNode;

            if (active.IsExplicit)
            {
               edge = Edge.Find(theString, Edges, active.originNode, theString[indexOfLastCharacter]);
               if (edge.startNode != -1)
               {
                  break;
               }
            }
            else
            {
               edge = Edge.Find(theString, Edges, active.originNode, theString[active.indexOfFirstCharacter]);
               int span = active.indexOfLastCharacter - active.indexOfFirstCharacter;
               if (theString[edge.indexOfFirstCharacter + span + 1] == theString[indexOfLastCharacter])
               {
                  break;
               }
               parentNode = edge.SplitEdge(active, theString, Edges, Nodes);
            }

            Edge newEdge = new Edge(theString, indexOfLastCharacter, theString.Count, parentNode);
            newEdge.Insert(theString, Edges, Nodes);
            if (lastParentNode > 0)
            {
               Nodes[lastParentNode].suffixNode = parentNode;
            }
            lastParentNode = parentNode;

            if (active.originNode == 0)
            {
               active.indexOfFirstCharacter++;
            }
            else
            {
               active.originNode = Nodes[active.originNode].suffixNode;
            }
            active.Canonize(theString, Edges);
             }
             if (lastParentNode > 0)
             {
            Nodes[lastParentNode].suffixNode = parentNode;
             }
             active.indexOfLastCharacter++;
             active.Canonize(theString, Edges);
        }