public static GRESCTask fromText(List<String> texts) {
		if (texts == null || texts.size() < 7) {
			return null;
		}
		GRESCTask task = new GRESCTask();
		task.sentence = texts.get(0).replaceAll("(___)+", " %s ");
		int blankNum = 0;
		for (int i = 0; i < task.sentence.length(); i++) {
			if (task.sentence.charAt(i) == '%') {
				blankNum++;
			}
		}
		if (!task.sentence.contains("%s")) {
			SparkUtils.getLogger().severe(task.sentence);
		} 
		task.options = new ArrayList<List<GRESCOption>>();
		List<GRESCOption> options = new ArrayList<GRESCOption>();
		for (int i = 1; i < texts.size() - 1; i++) {
			GRESCOption option = GRESCOption.fromText(texts.get(i), i);
			if (option.getBlanks().size() != blankNum) {
				SparkUtils.getLogger().severe(task.sentence);
			}
			options.add(option);
			if (i % 5 == 0) {
				task.options.add(options);
				options = new ArrayList<GRESCOption>();
			}
		}
		task.answer = GRESCAnswer.fromText(texts.get(texts.size() - 1));
		texts.clear();
		return task;
	}