code: private void compute(final List<Integer> variables) {
          final Stack<Integer> candidates = createInitialCandidates(variables);
          while (candidates.size() > 0) {
              final int lit = candidates.pop();
              if (solve(lit)) {
                  refineUpperBound();
              } else {
                  addBackboneLiteral(lit);
              }
          }
      }
docs: Computes the backbone for the given variables.
  @param variables variables to test