code: private void solution(BitSet traversed) {
          boolean included = false;
          BitSet projG1 = projectG1(traversed);
          BitSet projG2 = projectG2(traversed);
  
          // the solution must follows the search constrains
          // (must contain the mandatory elements in G1 an G2)
          if (isContainedIn(c1, projG1) && isContainedIn(c2, projG2)) {
              // the solution should not be included in a previous solution
              // at the RGraph level. So we check against all previous solution
              // On the other hand if a previous solution is included in the
              // new one, the previous solution is removed.
              for (Iterator<BitSet> i = solutionList.listIterator(); i.hasNext() && !included;) {
                  BitSet sol = i.next();
  
                  if (!sol.equals(traversed)) {
                      // if we asked to save all 'mappings' then keep this mapping
                      if (findAllMap && (projG1.equals(projectG1(sol)) || projG2.equals(projectG2(sol)))) {
                          // do nothing
                      }
                      // if the new solution is included mark it as included
                      else if (isContainedIn(projG1, projectG1(sol)) || isContainedIn(projG2, projectG2(sol))) {
                          included = true;
                      }
                      // if the previous solution is contained in the new one, remove the previous solution
                      else if (isContainedIn(projectG1(sol), projG1) || isContainedIn(projectG2(sol), projG2)) {
                          i.remove();
                      }
                  } else {
                      // solution already exists
                      included = true;
                  }
              }
  
              if (included == false) {
                  // if it is really a new solution add it to the
                  // list of current solution
                  solutionList.add(traversed);
              }
  
              if (!findAllStructure) {
                  // if we need only one solution
                  // stop the search process
                  // (e.g. substructure search)
                  stop = true;
              }
          }
      }
docs: Checks if a potential solution is a real one
  (not included in a previous solution)
  and add this solution to the solution list
  in case of success.
  
  @param  traversed  new potential solution