private List<List<Integer>> combine_helper (int[] candidates, int target, int start)
    {
    	List<List<Integer>> ret = new ArrayList<List<Integer>>();
    	for (int i = start; i < candidates.length; ++i)
    	{
        	if (candidates[i] > target)
        	{
        		return ret;
        	}
        	else if (candidates[i] == target)
        	{
        		System.out.println("equal");
        		ArrayList<Integer> tmp = new ArrayList<Integer>();
        		tmp.add(candidates[i]);
        		ret.add(tmp);
        		return ret;
        	}
        	else
        	{
	        	System.out.println(target - candidates[i]);
				List<List<Integer>> sub = 
						combine_helper(candidates, target-candidates[i], i);
				System.out.println(sub);
				if (sub != null && sub.size() != 0)
				{
	    			for (List<Integer> ls : sub)
	    			{
	    				ArrayList<Integer> tmp = new ArrayList<Integer>();
	    				tmp.add(candidates[i]);
	    				System.out.println(candidates[i]);
	    				tmp.addAll(ls);
	    				System.out.println(tmp);
	    				ret.add(tmp);
	    			}
	    			//return ret;
				}
        	}
    	}
    	return ret;
    }