profiling and optimizations
store board in a vector rather than in an array