{
 "puzzle": "wolf, goat and cabbage",
 "rules": [
  "The farmer, the wolf, the goat and the cabbage start on the left bank.",
  "Only the farmer rows; he carries at most one of the three per crossing.",
  "On a bank without the farmer, the wolf eats the goat and the goat eats the cabbage.",
  "Nothing else counts as a loss; any number of crossings is allowed."
 ],
 "arrangements": 16,
 "safe_arrangements": 10,
 "safe_arrangements_reachable_from_start": 10,
 "fewest_crossings": 7,
 "number_of_shortest_solutions": 2,
 "solutions_without_a_repeated_arrangement": 2,
 "note": "Counts hold under the four rules above. The two shortest solutions differ only in whether the wolf or the cabbage crosses third; swapping wolf and cabbage turns one into the other. Longer solutions exist only by repeating an arrangement.",
 "shortest_solutions": [
  [
   {
    "crossing": 1,
    "farmer_takes": "goat",
    "direction": "left to right",
    "left_bank_after": [
     "wolf",
     "cabbage"
    ],
    "right_bank_after": [
     "farmer",
     "goat"
    ]
   },
   {
    "crossing": 2,
    "farmer_takes": "alone",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "wolf",
     "cabbage"
    ],
    "right_bank_after": [
     "goat"
    ]
   },
   {
    "crossing": 3,
    "farmer_takes": "cabbage",
    "direction": "left to right",
    "left_bank_after": [
     "wolf"
    ],
    "right_bank_after": [
     "farmer",
     "goat",
     "cabbage"
    ]
   },
   {
    "crossing": 4,
    "farmer_takes": "goat",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "wolf",
     "goat"
    ],
    "right_bank_after": [
     "cabbage"
    ]
   },
   {
    "crossing": 5,
    "farmer_takes": "wolf",
    "direction": "left to right",
    "left_bank_after": [
     "goat"
    ],
    "right_bank_after": [
     "farmer",
     "wolf",
     "cabbage"
    ]
   },
   {
    "crossing": 6,
    "farmer_takes": "alone",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "goat"
    ],
    "right_bank_after": [
     "wolf",
     "cabbage"
    ]
   },
   {
    "crossing": 7,
    "farmer_takes": "goat",
    "direction": "left to right",
    "left_bank_after": [],
    "right_bank_after": [
     "farmer",
     "wolf",
     "goat",
     "cabbage"
    ]
   }
  ],
  [
   {
    "crossing": 1,
    "farmer_takes": "goat",
    "direction": "left to right",
    "left_bank_after": [
     "wolf",
     "cabbage"
    ],
    "right_bank_after": [
     "farmer",
     "goat"
    ]
   },
   {
    "crossing": 2,
    "farmer_takes": "alone",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "wolf",
     "cabbage"
    ],
    "right_bank_after": [
     "goat"
    ]
   },
   {
    "crossing": 3,
    "farmer_takes": "wolf",
    "direction": "left to right",
    "left_bank_after": [
     "cabbage"
    ],
    "right_bank_after": [
     "farmer",
     "wolf",
     "goat"
    ]
   },
   {
    "crossing": 4,
    "farmer_takes": "goat",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "goat",
     "cabbage"
    ],
    "right_bank_after": [
     "wolf"
    ]
   },
   {
    "crossing": 5,
    "farmer_takes": "cabbage",
    "direction": "left to right",
    "left_bank_after": [
     "goat"
    ],
    "right_bank_after": [
     "farmer",
     "wolf",
     "cabbage"
    ]
   },
   {
    "crossing": 6,
    "farmer_takes": "alone",
    "direction": "right to left",
    "left_bank_after": [
     "farmer",
     "goat"
    ],
    "right_bank_after": [
     "wolf",
     "cabbage"
    ]
   },
   {
    "crossing": 7,
    "farmer_takes": "goat",
    "direction": "left to right",
    "left_bank_after": [],
    "right_bank_after": [
     "farmer",
     "wolf",
     "goat",
     "cabbage"
    ]
   }
  ]
 ],
 "safe_graph_edges": [
  {
   "from": "farmer + wolf + goat + cabbage | nobody",
   "to": "wolf + cabbage | farmer + goat",
   "farmer_takes": "goat"
  },
  {
   "from": "farmer + goat + cabbage | wolf",
   "to": "cabbage | farmer + wolf + goat",
   "farmer_takes": "goat"
  },
  {
   "from": "farmer + goat + cabbage | wolf",
   "to": "goat | farmer + wolf + cabbage",
   "farmer_takes": "cabbage"
  },
  {
   "from": "farmer + wolf + cabbage | goat",
   "to": "wolf + cabbage | farmer + goat",
   "farmer_takes": "alone"
  },
  {
   "from": "farmer + wolf + cabbage | goat",
   "to": "cabbage | farmer + wolf + goat",
   "farmer_takes": "wolf"
  },
  {
   "from": "farmer + wolf + cabbage | goat",
   "to": "wolf | farmer + goat + cabbage",
   "farmer_takes": "cabbage"
  },
  {
   "from": "farmer + wolf + goat | cabbage",
   "to": "goat | farmer + wolf + cabbage",
   "farmer_takes": "wolf"
  },
  {
   "from": "farmer + wolf + goat | cabbage",
   "to": "wolf | farmer + goat + cabbage",
   "farmer_takes": "goat"
  },
  {
   "from": "farmer + goat | wolf + cabbage",
   "to": "goat | farmer + wolf + cabbage",
   "farmer_takes": "alone"
  },
  {
   "from": "farmer + goat | wolf + cabbage",
   "to": "nobody | farmer + wolf + goat + cabbage",
   "farmer_takes": "goat"
  }
 ]
}
