Implement a first-in-first-out (FIFO) queue using only two last-in-first-out (LIFO) stacks. The implemented queue should support push, pop, peek, and empty.
The classic two-stack trick: push to an inbox stack; when pop/peek is called and the outbox stack is empty, drain the inbox into the outbox (which reverses the order), then serve from the outbox top.
Example: push 1, push 2, peek → 1, pop → 1, empty → false.
1 1 false