private IState Swap(int a, int b) { var newSquare = (int[])_square.Clone(); var t = newSquare[a]; newSquare[a] = newSquare[b]; newSquare[b] = t; return new Square(newSquare); }