# Requirement change

We are shipping the game as three boxes — a short board for small children, the standard board, and
a long tournament board — and later we want the board printed from a file. So **the board is no
longer a property of the game; it is handed in.**

Your contract folder has a new `Board` record and an updated `Entry` with one extra factory:

    Entry.create(Board board, Dice dice)

- `Board` carries the number of squares and what sits on each of them. Squares are still numbered
  1..N, the last one is still the winning square, and every player still starts on square 0. A
  square not named in the map is plain.
- The **standard** factory `Entry.create(Dice)` must keep working exactly as it does now, on the
  same 30-square board. Nothing about the existing game changes.
- Every rule plays the same on any board: the die advance, the wasted roll past the last square,
  snakes, ladders, chaining, the six that rolls again, winning by finishing exactly on the last
  square, the announcements, and the errors. Only the geometry differs.

**Illegal boards must be refused**, with `IllegalArgumentException`, at construction — before a game
that could not be played is handed back. The rules are the ones you already have:

- at least two squares;
- every effect sits on a square between 1 and one below the last, so square 0 and the winning
  square are always plain;
- every snake's tail is a real square strictly below its head;
- every ladder's top is a real square strictly above its foot;
- **no chain of jumps loops back on itself.** A board where a ladder climbs into a snake that drops
  you onto a ladder that climbs back into the same snake would hang the game forever, so it is not a
  board — refuse it rather than play it.

Drop the updated `Entry` over the one you were given and add `Board` alongside it.
