// keep residual weights to variable forQueue
ArrayList<Pair<State, Float>> forQueue = new ArrayList<Pair<State, Float>>();
for (Pair<State, Float> ps : p) {
State old = ps.getLeft();
Float u = ps.getRight();
Float wnewRevert = semiring.divide(semiring.one(), wnew);
int numArcs = old.getNumArcs();
for (int j = 0; j < numArcs; j++) {
Arc arc = old.getArc(j);
if (label == arc.getIlabel()) {
State oldstate = arc.getNextState();