# Requirement change

We want a Connect-Four-style variant: instead of choosing a cell outright, a player names a
column and their mark drops to the lowest free row in it — you cannot leave a gap underneath
your own mark. A win is still a line of `winLength` in a row, in any direction, exactly as
before.

Your contract folder has a new way to build this kind of game:

    Entry.createGravity(int size, int winLength)

- Call `play(row, col)` exactly as before, but only `col` is meaningful — a mark always drops to
  the lowest free row of that column, whatever row you pass. The move result tells you which row
  it actually landed on.
- A column that is already full is rejected the same way an occupied cell is rejected elsewhere:
  the move does not happen and the turn does not pass.
- Everything else is unchanged: `X` still moves first, a win is still checked before a draw, the
  turn still does not pass once the game has ended, and a column outside `0..size-1` is still
  rejected as off the board.
- The standard game from `Entry.create(...)` is not affected by any of this.
