private static List<PositionalEdit> getPositionalEdits(Profile pieces, Map<String, Tree> built, Map<String, String> childToParent) {
		pieces = pieces.clone();
		built = Utilities.cloneMap(built);
		childToParent = Utilities.cloneMap(childToParent);
		
		List<PositionalEdit> edits = new ArrayList<PositionalEdit>();
		
		// each 2,3-Gram looks like (ancestor, parent, child1, child2, child3)
		for (Tuple<String> tup : pieces.getAllElements()) {
			Tree ancestor = getTree(tup.get(0), built);
			Tree parent = getTree(tup.get(1), built);
			int position = addChildToParent(ancestor, parent, childToParent);
			if (position >= 0) {
				edits.add(new PositionalEdit(ancestor.getLabel(), parent.getLabel(), position));
			}
			for (int i = 2; i < tup.size(); i++) {				
				String currentLabel = tup.get(i);
				Tree currentTree = getTree(currentLabel, built);
				position = addChildToParent(parent, currentTree, childToParent);
				if (position >= 0 && !currentLabel.equals(PQGram.STAR_LABEL)) {
					edits.add(new PositionalEdit(parent.getLabel(), currentLabel, position));
				}
			}
		}
		
		Collections.reverse(edits);
		for (PositionalEdit edit : edits) {
			Tree parent = built.get(edit.getA());
			parent.deleteChild(edit.getPosition());
		}
		Collections.reverse(edits);
		return edits;
	}