public static String[] mnemonics(String numberStr) {
		
		if (numberStr == null) {
			throw new NullPointerException();
		}
		if (numberStr.length() == 0) {
			throw new IllegalArgumentException("empty string");
		}
		
		// Get array of chars to simplify code
		char[] chars = numberStr.toCharArray();
		
		// First pass - how many elements do we need to return?
		int permutations = 1;
		for (char ch : chars) {
			int n = ch - '0';
			if (isDigit(ch)) {
				permutations *= Math.max(1, data[n].length);
			} else if (isPlain(ch)) {
				// nothing
			} else {
				throw new IllegalArgumentException(
					String.format("Invalid character %c in number string", ch));
			}
		}

		// Now we know the number of permutations
		String[] result = new String[permutations];

		// Do the actual work.
		int sIndex = 0;
		for (char ch : chars) {
			if (isDigit(ch)) {
				int n = ch - '0';
				for (char x : data[n]) {
					// XXX I got interrupted here...
				}	
			} else {
				// XXX 
			}
		}
		
		return result;
	}