input: Write a function to check for valid Boggle words on a board.
  assert boggle_checker([['C', 'A', 'T', 'S'], ['D', 'O', 'G', 'S'], ['P', 'I', 'G', 'S'], ['C', 'A', 'T', 'S']]) == ['CATS', 'DOGS', 'PIGS']
  assert boggle_checker([['A', 'B', 'C', 'D'], ['E', 'F', 'G', 'H'], ['I', 'J', 'K', 'L'], ['M', 'N', 'O', 'P']]) == ['AB', 'ABC', 'ABCD', 'ABCE', 'ABCF', 'ABCG', 'ABCH', 'ABCJ', 'ABCK', 'ABCL', 'ABCM', 'ABCN', 'ABCO', 'ABCP']
output: def boggle_checker(board):
      def dfs(x, y, word, visited, board, found_words):
          if len(word) > 1 and word not in found_words:
              found_words.add(word)
          directions = [(0, 1), (1, 0), (0, -1), (-1, 0),
                        (1, 1), (1, -1), (-1, 1), (-1, -1)]
          for dx, dy in directions:
              nx, ny = x + dx, y + dy
              if 0 <= nx < len(board) and 0 <= ny < len(board[0]) and (nx, ny) not in visited:
                  dfs(nx, ny, word + board[nx][ny], visited | {(nx, ny)}, board, found_words)
  
      found_words = set()
      for i in range(len(board)):
          for j in range(len(board[0])):
              dfs(i, j, board[i][j], {(i, j)}, board, found_words)
  
      return sorted(list(found_words))