code: public IAtomContainer proposeStructure() {
          logger.debug("RandomGenerator->proposeStructure() Start");
          do {
              try {
                  trial = molecule.clone();
              } catch (CloneNotSupportedException e) {
                  throw new IllegalStateException("Could not clone IAtomContainer!" + e.getMessage());
              }
              mutate(trial);
              if (logger.isDebugEnabled()) {
                  String s = "BondCounts:    ";
                  for (int f = 0; f < trial.getAtomCount(); f++) {
                      s += trial.getConnectedBondsCount(trial.getAtom(f)) + " ";
                  }
                  logger.debug(s);
                  s = "BondOrderSums: ";
                  for (int f = 0; f < trial.getAtomCount(); f++) {
                      s += trial.getBondOrderSum(trial.getAtom(f)) + " ";
                  }
                  logger.debug(s);
              }
          } while (trial == null || !ConnectivityChecker.isConnected(trial));
          proposedStructure = trial;
  
          return proposedStructure;
      }
docs: Proposes a structure which can be accepted or rejected by an external
  entity. If rejected, the structure is not used as a starting point
  for the next random move in structure space.
  
  @return A proposed molecule