Sure, here you go:
```
def mazeSolver(maze):
    stack = [(0, 0)]  # Starting position
    visited = set()
    
    while stack:
        current = stack.pop()
        if current == (len(maze)-1, len(maze[0])-1):  # Goal position
            return "path found"
        if current not in visited:
            visited.add(current)
            row, col = current[0], current[1]
            directions = [(row+1, col), (row-1, col), (row, col+1), (row, col-1)]
            for adjacent in directions:
                adj_row, adj_col = adjacent[0], adjacent[1]
                if 0 <= adj_row < len(maze) and 0 <= adj_col < len(maze[0]) and maze[adj_row][adj_col] != "W":
                    stack.append(adjacent + (current,))
    
    return "no path found"

```

In this implementation, the maze input is a 2D list of strings, where each element represents a cell in the maze and "W" represents a wall. The function returns "path found" if there exists a path from the starting position (0, 0) to the goal position (len(maze)-1, len(maze[0])-1), and "no path found" otherwise. The `current` variable is represented as a tuple of (row, col, parent), where `parent` is the previous cell in the path.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence