code: func isEmpty(a *Automaton) bool {
  	if a.numStates() == 0 {
  		// common case: no states
  		return true
  	}
  	if !a.IsAccept(0) && a.numTransitions(0) == 0 {
  		// common case: just one initial state
  		return true
  	}
  	if a.IsAccept(0) {
  		// apparently common case: it accepts the empty string
  		return false
  	}
  
  	workList := list.New()
  	seen := util.NewOpenBitSet()
  	workList.PushBack(0)
  	seen.Set(0)
  
  	t := newTransition()
  	for workList.Len() > 0 {
  		state := workList.Remove(workList.Front()).(int)
  		if a.IsAccept(state) {
  			return false
  		}
  		count := a.initTransition(state, t)
  		for i := 0; i < count; i++ {
  			a.nextTransition(t)
  			if !seen.Get(int64(t.dest)) {
  				workList.PushBack(t.dest)
  				seen.Set(int64(t.dest))
  			}
  		}
  	}
  
  	return true
  }
docs: // // L779
  // Returns true if the given automaton accepts no strings.