code: def _fill_hidden_singles(self):
          for i in utils.range_(self.side):
              box_i = (i // self.order) * self.order
              for j in utils.range_(self.side):
                  box_j = (j // self.order) * self.order
                  if self[i][j] > 0:
                      continue
                  p = self._possibles[i][j]
                  for k in utils.range_(self.side):
                      if k == j:
                          continue
                      p = p.difference(self._possibles[i][k])
                  if len(p) == 1:
                      self.set_cell(i, j, p.pop())
                      self.solution_steps.append(self._format_step("HIDDEN-ROW", (i, j), self[i][j]))
                      return True
                  p = self._possibles[i][j]
                  for k in utils.range_(self.side):
                      if k == i:
                          continue
                      p = p.difference(self._possibles[k][j])
                  if len(p) == 1:
                      self.set_cell(i, j, p.pop())
                      self.solution_steps.append(self._format_step("HIDDEN-COL", (i, j), self[i][j]))
                      return True
                  p = self._possibles[i][j]
                  for k in utils.range_(box_i, box_i + self.order):
                      for kk in utils.range_(box_j, box_j + self.order):
                          if k == i and kk == j:
                              continue
                          p = p.difference(self._possibles[k][kk])
                  if len(p) == 1:
                      self.set_cell(i, j, p.pop())
                      self.solution_steps.append(self._format_step("HIDDEN-BOX", (i, j), self[i][j]))
                      return True
          return False