public static void generateContextAndBlanks(GRESCTask task, List<String> context, List<List<GRESCBlank>> blanks) {
		String[] tokens = task.getSentence().split(" ");
		for (String token : tokens) {
			if (! GRESCTask.GRE_FORMAT_BLANK_INDICATOR.equals(token)) {
				context.add(token);
			}
		}
		
		List<GRESCOption> options = task.getOptions().get(0);
		// iterate five options
		for (GRESCOption option : options) {
			final List<GRESCBlank> lb = new ArrayList<GRESCBlank>();
			// iterate option words
			if (option.getBlanks().size() == 1) {
				lb.add(new GRESCBlank(GREBlankType.Word, option.getBlanks()));
			} else if (GRESCRule.isRequiredLookupDictionaty(option)) {
				PearsonHeadwordRequest request = new PearsonHeadwordRequest();
				request.setHeadWord(option.getBlanks());
				PearsonDictionary.getDictionary().lookupDictionary(request, new AbstractRequsetListener<PearsonHeadwordResponse>() {
					
					@Override
					public void onException(Exception exception) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onError(Error error) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onComplete(PearsonHeadwordResponse response) {
						try {
							response.response(response.getJsonResponse());
							List<PearsonDictionaryEntry> entries = response.getEntries();
							List<String> definition = PearsonDictionary.getDictionary().getFirstDefinition(entries);
							lb.add(new GRESCBlank(GREBlankType.Definition, definition));
						} catch (JSONException e) {
							e.printStackTrace();
						}
					}
				});
			} else {
				lb.add(new GRESCBlank(GREBlankType.Phrase, option.getBlanks()));
			}
		}
	}