public void computeWords2(String spelling) {
		String[] segmentedSpelling = segment(spelling).split(" ");
		String[] seg = segmentedSpelling;

		ArrayList<String> waitingSentence = new ArrayList<String>();
		ArrayList<Integer> waitingCount = new ArrayList<Integer>();
		char[] firstWords = findWaitingWords(seg[0]).toCharArray();
		for(char ch: firstWords) {
			//use wordCount instead of word probability, maybe it's good
			StringBuffer sb = new StringBuffer();
			sb.append(ch);
			waitingSentence.add(sb.toString());
			waitingCount.add((wordCount_.indexOf(words_.indexOf(ch))) + 1);
		}
		
		//waitingSentence
		//waitingPr
		/**
		 * CORE
		 */
		for(int k = 1; k < seg.length; k++) {
			//char[] words0 = findWaitingWords(seg[k - 1]).toCharArray();
			//System.out.println(findWaitingWords(seg[k]));
			char[] words = findWaitingWords(seg[k]).toCharArray();
			//probability for this round under k

			String[][] laterSentence = new String[waitingSentence.size()][words.length];
			int[][] laterCount = new int[waitingSentence.size()][words.length];
			for(int sentence_i = 0; sentence_i < waitingSentence.size(); sentence_i++) {
				//取出候选句子中最后一个字
				String sentence = waitingSentence.get(sentence_i);
				char[] words0 = sentence.toCharArray();
				char lastWord = words0[words0.length - 1];
				//得到候选句子的count之积
				int sentenceCount = waitingCount.get(sentence_i);
				
				//遍历当前字的所有可能
				for(int word_i = 0; word_i < words.length; word_i++) {
					char thisWord = words[word_i];
					int row = words_.indexOf(lastWord);
					int col = words_.indexOf(thisWord);
					int eachCount = 1;
					if(row >= 0 && col >= 0) {
						eachCount = this.phraseCount_[row][col] + 1;
					}
					//处理句子，加入候选矩阵
					StringBuffer sb = new StringBuffer(sentence);
					sb.append(thisWord);
					laterSentence[sentence_i][word_i] = sb.toString();
					//处理出现次数，加入候选矩阵
					int c = sentenceCount * eachCount;
					laterCount[sentence_i][word_i] = c;
				}
			}
			int waitingSentenceSize = waitingSentence.size();
			waitingSentence.clear();
			waitingCount.clear();
			for(int sentenceCount = 0; sentenceCount < waitingSentenceSize; sentenceCount++) {
				for(int wordCount = 0; wordCount < words.length; wordCount++) {
					waitingSentence.add(laterSentence[sentenceCount][wordCount]);
					waitingCount.add(laterCount[sentenceCount][wordCount]);
				}
			}
		}

		
		System.out.println(waitingCount.size());
		@SuppressWarnings("unchecked")
		ArrayList<Integer> waitingCountCopy = (ArrayList<Integer>) waitingCount.clone();
		Collections.sort(waitingCountCopy, Collections.reverseOrder());
		for(int i = 0; i < 5; i++){
			int index = waitingCount.indexOf(waitingCountCopy.get(i));
			String sentence = waitingSentence.get(index);
			System.out.println(sentence + waitingCountCopy.get(i));
		}

	}