A rigid piece should fall until any part of it would hit an obstacle or the board boundary. Implement the landing calculation without allowing individual cells to fall independently.
Build the implementation in C under /app, with /app/run.sh as its entry point. Read one JSON request from standard input and write one JSON result to standard output. Input has positive integer width and height, occupied cells and a nonempty piece, each a list of distinct integer [x,y] coordinates within the board. Coordinates grow rightward and downward. The initial piece must not overlap occupied cells. Return the largest nonnegative downward drop reachable one row at a time without collision or leaving the board. Reject invalid dimensions, duplicates, bounds or initial overlap.
Reject inputs that violate an explicit validation rule with exit status 2, no standard output, and {"error":"invalid_input"} on standard error. For valid input, exit with status 0. Keep the implementation reusable for new inputs; it must work offline and must not depend on the example data being the only data it receives.
Repair or replace the unfinished /app/run.sh and add source files under /app. Malformed JSON must use the same invalid-input response. Do not read /tests or /oracle from the application.