public static List<MatchString> multiply(final List<MatchString> multiplicand, final List<MatchString> multiplicator) {
			if (multiplicator.size() == 1) {
				for (final MatchString multiplicator1 : multiplicator)
					for (int i = 0; i < multiplicand.size(); i++) {
						final MatchString multiplicand1 = multiplicand.get(i);
						try {
							multiplicand1.multiplyInPlace(multiplicator1);
						} catch (final ImpossibleMatchException e) {
							// Discard matches that have become impossible
							multiplicand.remove(i);
							i--;
						}
					}
				return multiplicand;
			} else {
				final List<MatchString> result = new ArrayList<MatchString>(saturatingMultiply(multiplicand.size(), multiplicator.size()));
				for (final MatchString multiplicand1 : multiplicand)
					for (final MatchString multiplicator1 : multiplicator)
						try {
							result.add(new MatchString(multiplicand1, multiplicator1));
						} catch (final ImpossibleMatchException e) {
							// Discard matches that have become impossible
						}
				return result;
			}
		}