public ArrayList<ArrayList<Integer>> fourSum(int[] num, int target) {
    	ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>();
    	
    	Arrays.sort(num);
        for(int i=0; i<num.length-3; i++)
        {
            int a = num[i]; 
            for (int j=i+1; j<num.length-2; j++)
            {
            	int b=num[j];
            	
            	int start = j+1; 
            	int end = num.length-1;
            	
            	while(start < end)
            	{
            		int c = num[start]; 
            		int d = num[end]; 
            		int sum = a + b + c + d; 
            		if(sum == target) 
            		{
            			ArrayList<Integer> res = new ArrayList<Integer>();
            			res.add(a); 
            			res.add(b); 
            			res.add(c); 
            			res.add(d); 
            			results.add(res);
            			start++;
            			end--; 
            		}
            		
            		if(sum>target) end--; 
            		if(sum<target) start++;
            	}
            	
            	
            }
        }
        HashSet<String> unique = new HashSet<String>();
        for(int i=results.size()-1; i>=0; i--)
        {
        	String converted = results.get(i).toString();
        	if(unique.contains(converted))
        	{
        		results.remove(i);
        	}else
        	{
        		unique.add(converted);
        	}
        	
        }
        return results;
    }