{
int i, size = size();
StringIntPair[] H = new StringIntPair[size];
List<DEPCountArc> F = new ArrayList<DEPCountArc>();
IntOpenHashSet T = new IntOpenHashSet();
DEPCountArc a;
StringIntPair[] t = lHeads.get(0);
for (i=1; i<size; i++)
H[i] = new StringIntPair(t[i].s, t[i].i);
T.add(DEPLib.ROOT_ID);
F.addAll(getArcs(lHeads, T));
while (!F.isEmpty())
{
UTCollection.sortReverseOrder(F);
a = F.get(0);
H[a.depId].i = a.headId;
H[a.depId].s = a.deprel;
T.add(a.depId);
removeArcs(F, a.depId);
F.addAll(getArcs(lHeads, T));
}