Implement a function to simulate a two-player card game. Each player has a queue of card ranks (top at index 0), with ranks 2–14 where 11–14 represent J, Q, K, A; suits are ignored. In each round, both players draw their top card and compare ranks. The higher rank wins the round; the winner places all cards on the table to the bottom of their deck in the order revealed (winner’s card before opponent’s for each reveal). If the two cards tie, each player must draw exactly three additional cards; if a player cannot provide three additional cards, that player immediately loses. Otherwise, compare the third additional card from each player; the higher rank wins and takes all cards on the table. Continue until one player has no cards. To prevent infinite cycles, either stop if a previously seen (p1_deck, p2_deck) state repeats or after a large round cap (e.g., 1,000, 000), and in that case return a draw. Return the winner (1, 2, or "draw") and the total number of rounds simulated. Aim for O(total cards moved) time and O(n) space, where n is the total number of cards.