if (k < levels.length) sb.append(",");
if (k < levels.length-1) sb.append(",");
        protected void fillInSatisfyingAssignment(BDD node, int i) {            while (!node.isOne() && !node.isZero()) {                int v = node.level();                                // Mark skipped variables as dont-cares.                int j = i;                while (j < levels.length && levels[j] != v) {                    if (nodes[j] != null)                        throw new InternalError("nodes["+j+"] should be null");                    ++j;                }                if (j == levels.length) {                    StringBuffer sb = new StringBuffer();                    sb.append("BDD contains variable ");                    sb.append(factory.level2Var(v));                    sb.append(" not in iteration set: ");                    for (int k = 0; k < levels.length; ++k) {                        sb.append(factory.level2Var(k));                        if (k < levels.length) sb.append(",");                    }                    throw new BDDException(sb.toString());                }                i = j;                                // Put node in table.                nodes[i] = node;                                // Choose zero edge.                BDD node2 = node.low();                if (node2.isZero()) {                    // Zero edge is F.  Choose one edge instead.                    node2.free();                    values[i] = true;                    node2 = node.high();                }                node = node2;                ++i;            }        }