input: Write a function to solve Tower of Hanoi problem.
  assert tower_of_hanoi(2, 'A', 'C', 'B') == ["Move disk 1 from rod A to rod C", "Move disk 2 from rod A to rod B", "Move disk 1 from rod C to rod B"]
  assert tower_of_hanoi(3, 'A', 'C', 'B') == ["Move disk 1 from rod A to rod B", "Move disk 2 from rod A to rod C", "Move disk 1 from rod B to rod C", "Move disk 3 from rod A to rod B", "Move disk 1 from rod C to rod A", "Move disk 2 from rod C to rod B", "Move disk 1 from rod A to rod B"]
  assert tower_of_hanoi(1, 'A', 'C', 'B') == ["Move disk 1 from rod A to rod C"]
output: def tower_of_hanoi(n, source, target, auxiliary):
      def move_disks(n, source, target, auxiliary, result):
          if n == 1:
              result.append(f"Move disk 1 from rod {source} to rod {target}")
              return
          move_disks(n - 1, source, auxiliary, target, result)
          result.append(f"Move disk {n} from rod {source} to rod {target}")
          move_disks(n - 1, auxiliary, target, source, result)
      
      result = []
      move_disks(n, source, target, auxiliary, result)
      return result