I assume you all know the rules of "go" on an NxN board. If N<=21 (where 21 is the board size contemplated for future professional play in case the current size 19 is ever deemed inadequate) then an entire row of the go board would fit in a single 64-bit word using 3 bits per location. Actually 2 bits would suffice in principle because each location is either BLACK, WHITE, or EMPTY, but I'm granting you one extra bit for fooling around. This stores the board considerably more compactly than if you used a 2D array, hence fast board-copying; and it also allows "bit tricks" using word-wide parallelism to speed up common operations. The QUESTION is how fast can you implement the following: 1A. Find & count all board-locations connected via a chain of horizontal and/or vertical adjacencies to a given location X and where all these locations are required to contain WHITE. 1B. Find & count all board-locations connected via a chain of horizontal and/or vertical adjacencies to a given location X and where all these locations are required to contain BLACK. 1C. Also count all board-locations containing EMPTY and adjacent to the location-set found by 1A (also ditto for 1B). 2A. Find and count all EMPTY board-locations connected via a chain of EMPTYs to WHITE. 2B. Find and count all EMPTY board-locations connected via a chain of EMPTYs to BLACK. If these things can be made fast enough, then go program fancy board data structures, could be replaced with simple ones (but with somewhat complicated bit-trick algorithms). -- Warren D. Smith http://RangeVoting.org