docs: def _stage(self, accepted, count=0):
          """This is a repeated state in the state removal algorithm"""
          new5 = self._combine_rest_push()
          new1 = self._combine_push_pop()
          new2 = self._combine_push_rest()
          new3 = self._combine_pop_rest()
          new4 = self._combine_rest_rest()
          new = new1 + new2 + new3 + new4 + new5
          del new1
          del new2
          del new3
          del new4
          del new5
          if len(new) == 0:
              # self.printer()
              # print 'PDA is empty'
              # logging.debug('PDA is empty')
              return None
  
          self.statediag = self.statediag + new
          del new
          # print 'cleaning...'
  
          # It is cheaper to create a new array than to use the old one and
          # delete a key
          newstates = []
          for key in self.statediag:
              if len(key.trans) == 0 or key.trans == {}:
                  # rint 'delete '+`key.id`
                  # self.statediag.remove(key)
                  pass
              else:
                  newstates.append(key)
  
          del self.statediag
          self.statediag = newstates
          self.quickresponse = {}
          self.quickresponse_types = {}
          self.quickresponse_types[0] = []
          self.quickresponse_types[1] = []
          self.quickresponse_types[2] = []
          self.quickresponse_types[3] = []
          self.quickresponse_types[4] = []
          for state in self.statediag:
              if state.id not in self.quickresponse:
                  self.quickresponse[state.id] = [state]
              else:
                  self.quickresponse[state.id].append(state)
              self.quickresponse_types[state.type].append(state)
  
              # else:
              #     print `key.id`+' (type: '+`key.type`+' and sym:'+`key.sym`+')'
              #     print key.trans
          # print 'checking...'
          exists = self._check(accepted)
          if exists == -1:
              # DEBUGself.printer()
              # raw_input('next step?')
              return self._stage(accepted, count + 1)
          else:
              # DEBUGself.printer()
              # print 'Found '
              print exists
              # return self._stage(accepted, count+1)
              return exists