private int[] alphaBetaPrunning(int depth, Board b, int alpha, int beta,String player, int bestRow, int bestCol, int score) {
		
		
		if(cutoff(b, depth)) {
			//need to get score and row and column of move
			score = evaluate(b);
			return new int[] {score, bestRow, bestCol };
		}
		
		
		//children = all valid moves for this player
		ArrayList<Board> children = b.generateSuccesors(b, player);
		
	
		
		
		
		
		//this is max's turn
		if(player == "X") {
			
			//Iterate through the children board
			for(int i = 0; i < children.size(); i++) {
				
				bestRow = children.get(0).getNewMove()[0];
				bestCol = children.get(0).getNewMove()[1];
			
				int[] bestMove = alphaBetaPrunning(depth-1, children.get(i), alpha, beta, "O", bestRow, bestCol, score);
				
				score = bestMove[0];
						
				//if(score > alpha) alpha  = score
				//if(bestMove[0] > alpha[0]) { alpha = bestMove;  };
				
				if(score > alpha ) {
					alpha = score;
					bestRow = bestMove[1];
					System.out.println("score > alpha executes");
					bestCol = bestMove[2];
				}
					
				
				if(alpha >= beta) break;
				
				
			}
			
		}
		
		//opponent's turn
		else {
		
			//Iterate through the children board
			for(int i = 0; i < children.size(); i++) {
				
				bestRow = children.get(i).getNewMove()[0];
				bestCol = children.get(i).getNewMove()[1];
			
				int[] bestMove = alphaBetaPrunning(depth-1, children.get(i), alpha, beta, "X", bestRow, bestCol, 0);
				
				score = bestMove[0];
						
				//if(score > alpha) alpha  = score
				//if(bestMove[0] > alpha[0]) { alpha = bestMove;  };
				
				if(score < beta ) {
					beta = score;
					bestRow = bestMove[1];
					bestCol = bestMove[2];
				}
					
				
				if(alpha >= beta) break;
			
				
			}
			
		}
		
		
		return new int[] {score, bestRow, bestCol };
	
	}