Don't keep too long Substitution.string in case sub-string exist in the string
That should be a method of SubstitutionSequence (or SubstitutionSet is prefered).
If a Substitution has a sub-string which is in the parent string, remove this part (split the Substitution in two new Substitution objects, and do this recursively).