public void run() {
		BoardState board = new BoardState();
		Stack<BoardState> gameboards = new Stack<BoardState>();

		int r = 0;
		int c = 0;
		board.num_of_queens = 0;

		while (c < BOARD_SIZE) {
			while (r < BOARD_SIZE) {
				// System.out.println(r + " " + c);
				if (QueenConflicts(board, r, c) == 0) {
					System.out.println(r + " " + c);

					// Save Current Board State
					board.saveState(r, c, board.num_of_queens);
					gameboards.push(board);

					// Create copy of board
					BoardState newboard = new BoardState();
					newboard.saveState(r, c, board.num_of_queens);
					newboard.copyboard(board.board);

					board = newboard;
					board.board[r][c] = 1;
					board.num_of_queens++;

					printBoard(board);
					current_board = board;
					view.paintImmediately(0, 0, 1000, 1000);

					try {
						Thread.sleep(0);
					} catch (InterruptedException ex) {
						Thread.currentThread().interrupt();
					}

					if (board.num_of_queens == 8) {
						try {
							Thread.sleep(1000);
						} catch (InterruptedException ex) {
							Thread.currentThread().interrupt();
						}
						//System.exit(0);
						break;
					}
				}

				//printQueenConflicts(board);
				r++;
			}
			c++;

			// checked entire board so backtrack
			if (r > BOARD_SIZE - 1 && c > BOARD_SIZE - 1) {
				board = gameboards.pop();
				System.out.println("Stack Size " + gameboards.size());
				r = board.row;
				c = board.col;
				r = (r + 1) % BOARD_SIZE;
				if (board.row == (BOARD_SIZE - 1)) {
					c = (c + 1) % BOARD_SIZE;
				}
				System.out.println("BOARD POPPED");
				printBoard(board);
			} else {
				r = 0;
			}
		}
		printBoard(board);
	}