type person =
| Hobbit of string * int
| Dwarf of string * int
| Elf of string * region
and region = Lorien | Imladris | Mirkwood
let people1 =
[ Elf ("Amdir", Mirkwood) ; Elf ("Legolas", Mirkwood) ; Dwarf ("Thorin", 144) ; Hobbit ("Drogo", 98) ; Dwarf ("Oin", 134) ;
Dwarf ("Bofur", 134) ; Hobbit ("Filibert", 106) ; Elf ("Arwen", Imladris) ; Elf ("Celebrian", Imladris) ; Dwarf ("Nori", 92) ;
Dwarf ("Bombur", 140) ; Dwarf ("Fili", 92) ; Elf ("Lindir", Imladris) ; Dwarf ("Gloin", 140) ; Dwarf ("Bifur", 110) ;
Dwarf ("Kili", 92) ; Dwarf ("Balin", 180) ; Elf ("Galathil", Lorien) ; Hobbit ("Adamanta", 104) ; Elf ("Tauriel", Mirkwood) ;
Hobbit ("Rosa", 106) ; Dwarf ("Dwalin", 124) ; Hobbit ("Sam", 106) ; Elf ("Elladan", Imladris) ; Elf ("Gildor", Imladris) ;
Hobbit ("Doderic", 82) ; Elf ("Galadriel", Lorien) ; Elf ("Oropher", Mirkwood) ; Hobbit ("Bill", 104) ; Hobbit ("Pippin", 121) ;
Dwarf ("Ori", 116) ; Dwarf ("Dori", 124) ; Hobbit ("Bilbo", 102) ; Elf ("Thranduil", Mirkwood) ; Elf ("Celeborn", Lorien) ;
Elf ("Orophin", Lorien) ; Elf ("Elrond", Imladris) ; Hobbit ("Gorbulas", 98) ; Elf ("Haldir", Lorien) ; Hobbit ("Merry", 121) ;
Hobbit ("Frodo", 109) ]
type 'a room =
{
guard: person ;
tag: 'a ;
out1: 'a room option ;
out2: 'a room option ;
}