Recursive Depth-First Method
Current board B <- empty board.
Remaining pieces Q <- all pieces.
Procedure Solve(board B, set of pieces Q)
Place P in the first available
position of B in orientation A, obtaining B’.
If B’ is full and meets all constraints, output B’.
If B’ is full and does not meet all constraints, return.