code: private IQueryAtomContainer matchExact(IAtomContainer mol) {
          final IChemObjectBuilder bldr = mol.getBuilder();
          final IQueryAtomContainer qry = new QueryAtomContainer(mol.getBuilder());
          final Map<IAtom, IAtom> atmmap = new HashMap<>();
  
          for (IAtom atom : mol.atoms()) {
              IAtom qatom = matchExact(mol, atom);
              if (qatom != null) {
                  atmmap.put(atom, qatom);
                  qry.addAtom(qatom);
              }
          }
  
          for (IBond bond : mol.bonds()) {
              final IAtom beg = atmmap.get(bond.getBegin());
              final IAtom end = atmmap.get(bond.getEnd());
  
              // attach bond skipped
              if (beg == null || end == null)
                  continue;
  
              IQueryBond qbond = new QueryBond(beg, end, Expr.Type.TRUE);
              qry.addBond(qbond);
          }
  
          return qry;
      }
docs: Internal - create a query atom container that exactly matches the molecule provided.
  Similar to {@link org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator}
  but we can't access SMARTS query classes from that module (cdk-isomorphism).
  
  @param mol molecule
  @return query container
  @see org.openscience.cdk.isomorphism.matchers.QueryAtomContainerCreator