{
final MarkovClassifier ptaClassifier = new MarkovClassifier(m,pta);
final List<List<Label>> pathsToMerge=ptaClassifier.identifyPathsToMerge(checker);
// These vertices are merged first and then the learning start from the root as normal.
// The reason to learn from the root is a memory cost. if we learn from the middle, we can get a better results
verticesToMergeBasedOnInitialPTA=ptaClassifier.buildVerticesToMergeForPaths(pathsToMerge);
List<StatePair> pairsListInitialMerge = ptaClassifier.buildVerticesToMergeForPath(pathsToMerge);
LinkedList<AMEquivalenceClass<CmpVertex,LearnerGraphCachedData>> verticesToMergeInitialMerge = new LinkedList<AMEquivalenceClass<CmpVertex,LearnerGraphCachedData>>();
int scoreInitialMerge = pta.pairscores.computePairCompatibilityScore_general(null, pairsListInitialMerge, verticesToMergeInitialMerge);
assert scoreInitialMerge >= 0;