docs: public BitSet getTransitiveInputSet(ValueNumber output) {
          BitSet visited = new BitSet();
          BitSet result = new BitSet();
  
          if (DEBUG) {
              System.out.println("Output: " + output.getNumber());
          }
  
          LinkedList<ValueNumber> workList = new LinkedList<>();
          workList.addLast(output);
          while (!workList.isEmpty()) {
              ValueNumber valueNumber = workList.removeFirst();
              if (DEBUG) {
                  System.out.println("Check: " + valueNumber.getNumber());
              }
              visited.set(valueNumber.getNumber());
              BitSet inputSet = getInputSet(valueNumber);
              if (DEBUG) {
                  System.out.println("\tInput set is " + inputSet);
              }
              result.or(inputSet);
              for (int i = inputSet.nextSetBit(0); i >= 0; i = inputSet.nextSetBit(i+1)) {
                  if (!visited.get(i)) {
                      if (DEBUG) {
                          System.out.println("\tExplore: " + i);
                      }
                      workList.addLast(factory.forNumber(i));
                  }
              }
          }
          if (DEBUG) {
              System.out.println("Result: " + result);
          }
  
          return result;
      }