public StackSentence(
			StackSentence parent, int newWord, int[] sourceSentence, 
			Dictionary dict, LanguageModel langMod, LengthModel lenMod) {
		if(parent == null){
			words = new int[1];
		} else {
			words = new int[parent.words.length + 1];
			System.arraycopy(parent.words, 0, words, 0, parent.words.length);
		}
		words[words.length - 1] = newWord;
		// TODO: calc score from previous score
		double bigramScore = 1f;
		for(int i=0; i<words.length-1; i++){
			bigramScore *= langMod.getBigramProbability(words[i], words[i+1]);
		}
		double lengthScore = lenMod.getLengthPairProbability(words.length, sourceSentence.length);
		
		double dictScore = 1f;
		for(int f=0; f<sourceSentence.length; f++){
			if(sourceSentence[f] < 0) continue;
			double targetWordScore = 0.001f;
			for(int e=0; e<words.length; e++){
				if(words[e] < 0) continue;
				targetWordScore += dict.getTranslationScore(sourceSentence[f], words[e]);
			}
			dictScore *= targetWordScore;
		}
		
		score = bigramScore * lengthScore * dictScore * (double)(Math.pow(sourceSentence.length, words.length));
	}