input: from typing import List, Tuple
  
  def hanoi(n: int, source: List[Tuple[int, str]], spare: List[Tuple[int, str]], 
            target: List[Tuple[int, str]]) -> None:
      """Solves the Towers of Hanoi problem for n disks, starting from the `source` peg,
      using the `spare` peg as the auxiliary, and moving the disks to the `target` peg.
      Prints each move made.
      >>> n = 3
      >>> source = [(i, "A") for i in range(1, n+1)]
      >>> target = []
      >>> spare = []
      >>> hanoi(n, source, spare, target)
      Moving disk 1 from A to C
      Moving disk 2 from A to B
      Moving disk 1 from C to B
      Moving disk 3 from A to C
      Moving disk 1 from B to A
      Moving disk 2 from B to C
      Moving disk 1 from A to C
      """
      if n == 1:
          disk = source.pop(0)
          print("Moving disk {0} from {1} to {2}".format(disk[0], disk[1], target[1]))
          target.insert(0, disk)
      else:
          hanoi(n-1, source, target, spare)
          disk = source.pop(0)
          print("Moving disk {0} from {1} to {2}".format(disk[0], disk[1], target[1]))
          target.insert(0, disk)
          hanoi(n-1, spare, source, target)
  
output:     if n == 1:
          disk = source.pop(0)
          print("Moving disk {0} from {1} to {2}".format(disk[0], disk[1], target[0][1] if target else "C"))
          target.insert(0, disk)
      else:
          hanoi(n-1, source, target, spare)
          disk = source.pop(0)
          print("Moving disk {0} from {1} to {2}".format(disk[0], disk[1], target[0][1] if target else "C"))
          target.insert(0, disk)
          hanoi(n-1, spare, source, target)