public static List<String> generateAllSentencesWithAllDefinitions(GRESCTask task) {
		List<String> pSentences = new ArrayList<String>();
		List<GRESCOption> options = task.getOptions().get(0);
		for (GRESCOption option : options) {
			String sentence = task.getSentence().replaceAll("%s", "\\(%s\\)");
			String formattedSentence = String.format(sentence, option.getBlanks().toArray());
			
			List<String> singleWord = new ArrayList<String>();
			List<String> blank = new ArrayList<String>();
			List<String> allWord = new ArrayList<String>();
			// dictionary look up
			for (String token : option.getBlanks()) {
				if (!SparkUtils.isPhrase(token)) {
					// it is a word
					allWord.add("%s");
					singleWord.add(token);
					blank.add(token);
				} else {
					// it is a phrase
					System.out.println(token);
					allWord.add(token);
				}
			}
			
			if (singleWord.size() > 0) {
				String dictSentence = String.format(sentence, allWord.toArray());
				List<List<String>> singleWordDefinitions = new ArrayList<List<String>>(); 
				
				// iterate the single word list and look up all single word using Pearson Dictionary
				for (int i = 0; i < singleWord.size(); i++) {
					PearsonHeadwordRequest request = new PearsonHeadwordRequest();
					request.setHeadWord(singleWord.get(i));
					try {
						PearsonHeadwordResponse response = PearsonDictionary.getDictionary().lookupDictionary(request);
						if (response != null) {
							response.response(response.getJsonResponse());
							List<PearsonDictionaryEntry> entries = response.getEntries();
							singleWordDefinitions.add(PearsonDictionary.getDictionary().getAllDefinitions(entries));
						}
					} catch (JSONException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
					singleWordDefinitions.get(i).add(singleWord.get(i));
				}

				// enumerate all possible combinations of the single word definitions
				List<List<String>> enumerations = SparkUtils.enumerate(singleWordDefinitions);
				for (List<String> ems : enumerations) {
					StringBuilder dictFormattedSentence = new StringBuilder(); 
					dictFormattedSentence.append(option.getOptionId());
					dictFormattedSentence.append(":");
					dictFormattedSentence.append(String.format(dictSentence, ems.toArray()));
					pSentences.add(dictFormattedSentence.toString());
				}
			} else {
				pSentences.add(formattedSentence);	
			}
		}
		return pSentences;
	}