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);
}