class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
        vector<vector<int>> a;
        vector<int>b;
        if(num.empty()) return a;
        sort(num.begin(), num.end());
        for(int i=0;i<num.size()-2;i++)
        {
            int j=i+1,r=num.size()-1;
            if(num[i]>0) break;
            while(j<r)
            {
                int target=num[i]+num[j]+num[r];
                if(target>0) r--;
                else if(target<0) j++;
                else
                {
                    b.push_back(num[i]);
                    b.push_back(num[j]);
                    b.push_back(num[r]);
                    a.push_back(b);
                    b.clear();
                    j++,r--;
                }
            }
        }
        set<vector<int>> w(a.begin(),a.end());
        a.assign(w.begin(),w.end());
        return a;
    }
};