the main struct for the 2d array
struct that expresses index in 2d array
wrapper struct for iterating over rows
wrapper struct for iterating over mutable rows
trait that is used for indexing the 2d array