docs: def notChainStr (states, s):
      """XXX I'm not sure this is how it should be done, but I'm going to
      try it anyway.  Note that for this case, I require only single character
      arcs, since I would have to basically invert all accepting states and
      non-accepting states of any sub-NFA's.
      """
      assert len(s) > 0
      arcs = list(map(lambda x : newArcPair(states, x), s))
      finish = len(states)
      states.append([])
      start, lastFinish = arcs[0]
      states[start].append((EMPTY, finish))
      for crntStart, crntFinish in arcs[1:]:
          states[lastFinish].append((EMPTY, crntStart))
          states[crntStart].append((EMPTY, finish))
      return start, finish