BDD t = X[i][l].not(); BDD u = X[i][j].imp(t); t.free();
BDD u = X[i][l].apply(X[i][j], BDDFactory.nand);
    static void build(int i, int j) {        BDD a = B.one(), b = B.one(), c = B.one(), d = B.one();        int k, l;        /* No one in the same column */        for (l = 0; l < N; l++) {            if (l != j) {		BDD t = X[i][l].not();		BDD u = X[i][j].imp(t);		t.free();                a.andWith(u);            }        }        /* No one in the same row */        for (k = 0; k < N; k++) {            if (k != i) {		BDD t = X[k][j].not();		BDD u = X[i][j].imp(t);		t.free();                b.andWith(u);            }        }        /* No one in the same up-right diagonal */        for (k = 0; k < N; k++) {            int ll = k - i + j;            if (ll >= 0 && ll < N) {                if (k != i) {		    BDD t = X[k][ll].not();		    BDD u = X[i][j].imp(t);		    t.free();                    c.andWith(u);                }            }        }        /* No one in the same down-right diagonal */        for (k = 0; k < N; k++) {            int ll = i + j - k;            if (ll >= 0 && ll < N) {                if (k != i) {		    BDD t = X[k][ll].not();		    BDD u = X[i][j].imp(t);		    t.free();                    d.andWith(u);                }            }        }                c.andWith(d);        b.andWith(c);        a.andWith(b);        queen.andWith(a);    }