public ArrayList<String> letterCombinations2(String digits) {
		// IMPORTANT: Please reset any member data you declared, as
		// the same Solution instance will be reused for each test case.
		HashMap<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();
		for (int i = 2; i <= 6; ++i) {
			char base = (char) ((3 * (i - 2)) + 'a');
			ArrayList<String> list = new ArrayList<String>();
			list.add(base + "");
			list.add((char) (base + 1) + "");
			list.add((char) (base + 2) + "");
			map.put(i, list);
		}
		ArrayList<String> list1 = new ArrayList<String>();
		list1.add("p");
		list1.add("q");
		list1.add("r");
		list1.add("s");
		map.put(7, list1);
		for (int i = 8; i <= 8; ++i) {
			char base = (char) ((3 * (i - 8)) + 't');
			ArrayList<String> list = new ArrayList<String>();
			list.add(base + "");
			list.add((char) (base + 1) + "");
			list.add((char) (base + 2) + "");
			map.put(i, list);
		}
		char base = (char) ((3 * (9 - 8)) + 't');
		ArrayList<String> list = new ArrayList<String>();
		list.add(base + "");
		list.add((char) (base + 1) + "");
		list.add((char) (base + 2) + "");
		map.put(9, list);
		if (digits.length() == 0) {
			ArrayList<String> res = new ArrayList<String>();
			res.add("");
			return res;
		}
		return combine2(digits, map);
	}