code: public static Pattern reactsWith(Blacklist blacklist)
  	{
  		Pattern p = new Pattern(SmallMoleculeReference.class, "SMR1");
  		p.add(erToPE(), "SMR1", "SPE1");
  		p.add(notGeneric(), "SPE1");
  		p.add(linkToComplex(blacklist), "SPE1", "PE1");
  		p.add(new ParticipatesInConv(RelType.INPUT, blacklist), "PE1", "Conv");
  		p.add(type(BiochemicalReaction.class), "Conv");
  		p.add(new InterToPartER(InterToPartER.Direction.ONESIDERS), "Conv", "SMR1");
  		p.add(new ConversionSide(ConversionSide.Type.SAME_SIDE, blacklist, RelType.INPUT), "PE1", "Conv", "PE2");
  		p.add(type(SmallMolecule.class), "PE2");
  		p.add(linkToSpecific(), "PE2", "SPE2");
  		p.add(notGeneric(), "SPE2");
  		p.add(new PEChainsIntersect(false), "SPE1", "PE1", "SPE2", "PE2");
  		p.add(peToER(), "SPE2", "SMR2");
  		p.add(equal(false), "SMR1", "SMR2");
  		p.add(new InterToPartER(InterToPartER.Direction.ONESIDERS), "Conv", "SMR2");
  		return p;
  	}
docs: Constructs a pattern where first and last small molecules are substrates to the same
  biochemical reaction.
  
  @param blacklist a skip-list of ubiquitous molecules
  @return the pattern