input: Write a function to create an object-oriented structure to solve a maze by using Python. The maze is represented as a grid where 1 represents a path and 0 represents a wall. The goal is to find a path from the top-left corner to the bottom-right corner of the maze. If a path is found, return the number of steps taken to reach the end; otherwise, return an empty list.
  
  class Maze:
      def __init__(self, n, m, grid):
          self._n, self._m = n, m
          self._grid = grid
  
      def solve_maze(self):
          result, found = [], False
          start, end = (0, 0), (self._n-1, self._m-1)
  
          for i in range(self._n):
              for j in range(self._m):
                  if self._grid[i][j] == 1:
                      value = 0
                      self._find_omega(i, j, value, result, start, end, found)
                      return result
          return result
  
      def _find_omega(self, i, j, value, result, start, end, found):
          rowNbr, colNbr = [-1, 0, 0, 1], [0, -1, 1, 0]
  
          if (i, j) == end:
              found = True
              result.append(value)
              return
  
          if found:
              return
  
          self._grid[i][j] = 0
          for k in range(4):
              if self._on_board(i + rowNbr[k], j + colNbr[k]):
                  self._find_omega(i + rowNbr[k], j + colNbr[k], value + 1, result, start, end, found)
  
      def _on_board(self, i, j):
          return 0 <= i < self._n and 0 <= j < self._m and self._grid[i][j] == 1
  
  assert Maze(3, 3, [[1, 1, 1], [0, 0, 1], [0, 0, 1]]).solve_maze() == [5]
  assert Maze(3, 3, [[1, 0, 0], [1, 1, 0], [0, 1, 1]]).solve_maze() == [5]
  assert Maze(3, 3, [[1, 0, 0], [1, 0, 0], [0, 0, 1]]).solve_maze() == []
  assert Maze(2, 2, [[1, 0], [0, 1]]).solve_maze() == []
output: def solve_maze(self):
      from collections import deque
      start, end = (0, 0), (self._n-1, self._m-1)
      queue = deque([(start, 0)])
      visited = set()
      directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
      
      while queue:
          (x, y), steps = queue.popleft()
          if (x, y) == end:
              return [steps]
          if (x, y) in visited:
              continue
          visited.add((x, y))
          for dx, dy in directions:
              nx, ny = x + dx, y + dy
              if 0 <= nx < self._n and 0 <= ny < self._m and self._grid[nx][ny] == 1:
                  queue.append(((nx, ny), steps + 1))
      return []