private List<ScoredPhrasePairForSentence> readBackPointers(
      DecoderState state,
      List<HashMap<DecoderState, BackPointerElement>> backPointersList,
      int startLength,
      int sentenceLength) {
    DecoderState curState = state;
    DecoderState startState = getStartState(sentenceLength);

    int curLength = startLength;

    List<ScoredPhrasePairForSentence> phrases = new ArrayList<>();
    while (!curState.equals(startState)) {
      BackPointerElement backPointer = backPointersList.get(curLength).get(curState);
      phrases.add(0, backPointer.getPhrase());
      curState = backPointer.getState();
      curLength = decoderModel.getDecodedLength(curState);
    }

    return phrases;
  }