input: 
  def find_solution_path(maze_map: List[List[int]], start: Tuple[int, int], end: Tuple[int, int]) -> List[Tuple[int, int]]:
      """
      Given a maze represented as a 2D list of integers, find the shortest path from the start position to the end position.
      A value of 1 in the maze represents a valid path, and a value of 0 represents an obstacle.
      
      >>> find_solution_path([[1, 0, 1], [1, 1, 1], [1, 0, 1]], (0, 0), (2, 2))
      [(0, 0), (1, 0), (1, 1), (2, 1), (2, 2)]
      >>> find_solution_path([[1, 0, 1], [1, 0, 1], [1, 1, 1]], (0, 0), (2, 2))
      [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)]
      """
  
output:     
      from collections import deque
  
      def is_valid(x, y):
          return 0 <= x < len(maze_map) and 0 <= y < len(maze_map[0]) and maze_map[x][y] == 1
  
      directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
      queue = deque([(start, [start])])
      visited = set()
      visited.add(start)
  
      while queue:
          (current_x, current_y), path = queue.popleft()
          if (current_x, current_y) == end:
              return path
          for dx, dy in directions:
              new_x, new_y = current_x + dx, current_y + dy
              if is_valid(new_x, new_y) and (new_x, new_y) not in visited:
                  visited.add((new_x, new_y))
                  queue.append(((new_x, new_y), path + [(new_x, new_y)]))
  
      return []
  