Following this query on memento pattern, I have tried to put my understanding to test.Memento pattern stands for three things:Saving state of the memento object for its successful retrievalSaving carefully each valid state of the mementoEncapsulating the saved states from the change inducer so that each state remains unalteredHave I achieved these three with my design?ProblemThis is a zero player game where the program is initialized with a particular set up of chess pawns - the knight and queen. Then program then needs to keep adding set of pawns or knights and queens so that each pawn is safe for the next one move of every other pawn.The condition is that either both pawns should be placed, or none of them should be placed. The chessboard with the most number of non conflicting knights and queens should be returned.ImplementationI have 4 classes for this:protected ChessBoard (the Memento)private int [][] ChessBoard;public void ChessBoard();protected void SetChessBoard();protected void GetChessBoard(int);public Pawn This is not related to memento. It holds info about the pawnspublic enum PawnType: int{    Empty = 0,    Queen = 1,    Knight = 2,}//This returns a value that shown if the pawn can be placed safelypublic bool IsSafeToAddPawn(PawnType);public CareTaker This corresponds to caretaker of mementoThis is a double dimentional integer array that keepsa track of all states. The reason for having 2D array is tokeep track of how many states are stored andwhich state is currently active. An example:0 -21 -12 0 - This is current state. With second index 0/3 1 - This state has been saved, but has been undone  private int [][]State;private ChessBoard [] MChessBoard;//This gets the chessboard at the position requested and assigns it to originatorpublic ChessBoard GetChessBoard(int);//This overwrites the chessboard at given positionpublic void SetChessBoard(ChessBoard, int);private int [][]State;public PlayGame (This is the originator)private bool status;private ChessBoard oChessBoard;//This sets the state of chessboard at position specified publicSetChessBoard(ChessBoard, int);//This gets the state of chessboard at position specified publicChessBoard GetChessBoard(int);//This function tries to place both the pawns and returns the status of this attemptpublic bool PlacePawns(Pawn);Edit after discussion with KevinThe way I am trying to apply design patterns to my problems is not correct. In a way it helps me understand how to implement it. Yes. But then, this is not its ideal usage. I might as well simplify my learning problem and use my text book ones.Also refer to this question on programmers.stackoverflow and all the discussions! 
A sample Memento pattern: Is it correct?
c#;design patterns;class design
You don't need a Memento pattern for this problem, just simple backtracking.  I didn't quite understand your use of 'pawn', but basically you put something in the first legal spot.  You only need to remember the current position and the best so far.  When you can't put anything else on the board, then save the position if it is better than the previous best.  Then undo the last placement and try the next spot.