private static boolean levenshteinOK(String a, String b, int aOffset, int bOffset, int max)
	{
		if (aOffset < 0) return (bOffset <= max);
		if (bOffset < 0) return (aOffset <= max);
		if (a.charAt(aOffset) == b.charAt(bOffset))
			return levenshteinOK(a, b, aOffset - 1, bOffset - 1, max);
		if (max == 0) return false;
		if (levenshteinOK(a, b, aOffset - 1, bOffset, max - 1))
			return true;
		if (levenshteinOK(a, b, aOffset, bOffset - 1, max - 1))
			return true;
		if (levenshteinOK(a, b, aOffset - 1, bOffset - 1, max - 1))
			return true;
		return false;
	}