public static int min(int depth, int hardMin){
		if (depth == MAX_DEPTH) return evaluate();
		int bestScore = Integer.MAX_VALUE;
		long[] tempData = data;
		String moves = MoveGenerator.getMoves(data);
		
		for (int i = 0; i < moves.length(); i += 4){
			data = MoveGenerator.makeMove(moves.substring(i, i + 4), tempData);
			if (data != null){
				int tempScore = max(depth + 1, bestScore);
				if (tempScore <= hardMin) return tempScore;
				else if (tempScore < bestScore) bestScore = tempScore;
			}
			if (!run) break;
		}
		
		if (bestScore == Integer.MAX_VALUE)
			if (MoveGenerator.underCheck(tempData)) return 200000 - depth;
			else return 0;
		
		return bestScore;
	}