input: Write a python function to solve the Tower of Hanoi problem and print the moves.
  assert hanoi_solver(1, 'A', 'B', 'C') == "Move disc 1 from A to C"
  assert hanoi_solver(2, 'A', 'B', 'C') == "Move disc 1 from A to B\nMove disc 2 from A to C\nMove disc 1 from B to C"
  assert hanoi_solver(3, 'A', 'B', 'C') == "Move disc 1 from A to C\nMove disc 2 from A to B\nMove disc 1 from C to B\nMove disc 3 from A to C\nMove disc 1 from B to A\nMove disc 2 from B to C\nMove disc 1 from A to C"
output: def hanoi_solver(n, source, auxiliary, target):
      def solve(n, source, auxiliary, target, moves):
          if n == 1:
              moves.append(f"Move disc 1 from {source} to {target}")
          else:
              solve(n - 1, source, target, auxiliary, moves)
              moves.append(f"Move disc {n} from {source} to {target}")
              solve(n - 1, auxiliary, source, target, moves)
      
      moves = []
      solve(n, source, auxiliary, target, moves)
      return "\n".join(moves)