code: def __step4(self):
          
          step = 0
          done = False
          row = -1
          col = -1
          star_col = -1
          while not done:
              (row, col) = self.__find_a_zero()
              if row < 0:
                  done = True
                  step = 6
              else:
                  self.marked[row][col] = 2
                  star_col = self.__find_star_in_row(row)
                  if star_col >= 0:
                      col = star_col
                      self.row_covered[row] = True
                      self.col_covered[col] = False
                  else:
                      done = True
                      self.Z0_r = row
                      self.Z0_c = col
                      step = 5
  
          return step
docs: Find a noncovered zero and prime it. If there is no starred zero
          in the row containing this primed zero, Go to Step 5. Otherwise,
          cover this row and uncover the column containing the starred
          zero. Continue in this manner until there are no uncovered zeros
          left. Save the smallest uncovered value and Go to Step 6.