#include <vector>
class Solution {
public:
    vector<vector<int>>ans;
    vector<int> t;
    set<vector<int>> s;
    vector<vector<int> > threeSum(vector<int> &num) {
        if(num.size()<3) return ans;
        sort(num.begin(),num.end());
        for(int i=0;i<num.size()-2;i++){
            int j=i+1,k=num.size()-1;
            while(j<k){
                int sum=num[i]+num[j]+num[k];
                if(sum==0){
                    t.push_back(num[i]);
                    t.push_back(num[j]);
                    t.push_back(num[k]);
                    sort(t.begin(),t.end());
                    if(s.count(t)==0){
                        ans.push_back(t);
                        s.insert(t);
                    }
                    t.clear();
                    if(num[k]==num[k-1]){
                        k--;
                    }
                    else if(num[j]==num[j+1]){
                        j++;
                    }
                    else {
                        j++;
                        k--;
                    }
                }
                else if(sum<0){
                    j++;
                }
                else k--;
            }
        }

        return ans;
    }
};