anchor.diff:                  else ast.other <- Array.append ast.other [|newFamily|]
           | Some _ -> ()
   
  -    let rec addToNonTermEnds (curLevel:ResizeArray<LabledPrefix<_>>) (ast:AstNode) (tailLPrefixes:ResizeArray<LabledPrefix<_>>) (was:ResizeArray<ResizeArray<LabledPrefix<_>>>) =   //to do
  -        //dfs, was array
  +    let rec addToNonTermEnds (curLevel:ResizeArray<LabledPrefix<_>>) (ast:AstNode) (tailLPrefixes:ResizeArray<LabledPrefix<_>>) (was:ResizeArray<ResizeArray<LabledPrefix<_>>>) =
           was.Add(curLevel)
           for curLPrefix in curLevel do
               match curLPrefix with
  
positive.code:                             if not <| vertexesToPrefs.[v].Contains(End)
                              then
                                  vertexesToPrefs.[v].Add(gssPrefix)
                          (*|Epsilon prefixes ->  //already exist in another gss
                              for pr in prefixes do
                                  if not <| vertexesToPrefs.[v].Contains(gssPrefix)
                                  then
                                      vertexesToPrefs.[v].Add(gssPrefix)*)
                          |_ -> ignore()
  
          let rec dfs (v:VInfo<_>) =
  
negative.code:                 let newStartLevel = new ResizeArray<_>()
                  newStartLevel.Add(NontermStart (ast, nonTermsAstToPrefixes.[ast]))
                  pathToPrefixes path.Tail (newStartLevel)
              | _ -> new ResizeArray<LabledPrefix<_>>()     //assert
  
      let handlePath (path : Path) (final : Vertex) startV nonTerm pos prod shouldEnqueueVertex (startGssV : Vertex) =
  