input: 
  def test_tic_tac_toe():
      """ Test the main function of the Tic Tac Toe game.
      >>> main()
      Welcome to Tic Tac Toe!
      |   |   |   |
      |   |   |   |
      |   |   |   |
      Your turn player 1
      Enter your move (1-9): 5
      |   |   |   |
      |   | X |   |
      |   |   |   |
      Your turn player 2
      Enter your move (1-9): 1
      | O |   |   |
      |   | X |   |
      |   |   |   |
      Your turn player 1
      Enter your move (1-9): 3
      | O |   | X |
      |   | X |   |
      |   |   |   |
      Your turn player 2
      Enter your move (1-9): 7
      | O |   | X |
      |   | X |   |
      | O |   |   |
      Your turn player 1
      Enter your move (1-9): 9
      | O |   | X |
      |   | X |   |
      | O |   | X |
      X Wins! Congratulations!
      """
  
output:     
      print("Welcome to Tic Tac Toe!")
      board = [" "] * 9
      player = "X"
      while True:
          print_board(board)
          print(f"Your turn player {player}")
          move = input("Enter your move (1-9): ")
          if move.isdigit() and 1 <= int(move) <= 9 and board[int(move) - 1] == " ":
              board[int(move) - 1] = player
              if check_winner(board, player):
                  print_board(board)
                  print(f"{player} Wins! Congratulations!")
                  break
              elif " " not in board:
                  print_board(board)
                  print("It's a draw!")
                  break
              player = "O" if player == "X" else "X"
          else:
              print("Invalid move, try again.")
  
  def print_board(board):
      for i in range(0, 9, 3):
          print(f"| {board[i]} | {board[i+1]} | {board[i+2]} |")
  
  def check_winner(board, player):
      win_patterns = [
          [0, 1, 2], [3, 4, 5], [6, 7, 8],  # rows
          [0, 3, 6], [1, 4, 7], [2, 5, 8],  # columns
          [0, 4, 8], [2, 4, 6]              # diagonals
      ]
      for pattern in win_patterns:
          if all(board[i] == player for i in pattern):
              return True
      return False
  