public ArrayList<ArrayList<String>> partition(String s) {
		int length = s.length();
		//initial a indicator:
		boolean[][] indicator = new boolean[length][];
		for(int i = 0; i < length; ++i){
			indicator[i] = new boolean[length];
			for(int j = 0; j < length; ++j){
				indicator[i][j] = false; 
			}
		}
		
		for(int i = length - 1; i >= 0; --i){
			for(int j = i; j < length; ++j){
				indicator[i][j] = (s.charAt(i) == s.charAt(j)) && ((j - i) < 2 || (indicator[i+1][j-1])); 
			}
		}
		
		ArrayList<ArrayList<String>> result = helper1(s, indicator, 0);
		for(int i = 0; i < result.size(); ++i){
			Collections.reverse(result.get(i));
		}
		
//		printMatrix(indicator);
		return result;
	}