class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
    ///int num0;
    int numarr[100005];
    int k=0;
    int kk=0;
    int flag=0;
    int ans1[100005],ans2[100005],ans3[100005];
    int ans=0;
    vector<int> myans[100005];
    int q=0;
    vector<vector<int>> myAns;
    if(num.size()==0) return myAns;
    while(1)
    {
        ///scanf("%d",&num0);
        numarr[k++]=num[kk++];
        if(kk==num.size()) break;
    }
    int sw;
    for(int i=0;i<k;++i)
    {
        for(int j=i+1;j<k;++j)
        {
            if(numarr[i]>numarr[j])
            {
                sw=numarr[i];
                numarr[i]=numarr[j];
                numarr[j]=sw;
            }
        }
    }
    for(int i=0;i<k;++i)
    {
        for(int j=i+1;j<k;++j)
        {
            for(int z=j+1;z<k;++z)
            {
                if(numarr[i]+numarr[j]+numarr[z]==0)
                {
                    for(int q=0;q<ans;++q)
                    {
                        int q1=0;
                        int q2=0;
                        int q3=0;
                        if(numarr[i]==ans1[q]) q1=1;
                        if(numarr[i]==ans2[q]) q2=1;
                        if(numarr[i]==ans3[q]) q3=1;
                        if(q1)
                        {
                            q2=0;
                            q3=0;
                            if(numarr[j]==ans2[q]) q2=1;
                            if(numarr[j]==ans3[q]) q3=1;
                            if(q2)
                            {
                                if(numarr[z]==ans3[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                            if(q3)
                            {
                                if(numarr[z]==ans2[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                            q2=0;
                            q3=0;
                        }
                        if(q2)
                        {
                            q3=0;
                            if(numarr[j]==ans1[q]) q1=1;
                            if(numarr[j]==ans3[q]) q3=1;
                            if(q1)
                            {
                                if(numarr[z]==ans3[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                            if(q3)
                            {
                                if(numarr[z]==ans1[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                            q3=0;
                        }
                        if(q3)
                        {
                            if(numarr[j]==ans1[q]) q1=1;
                            if(numarr[j]==ans2[q]) q2=1;
                            if(q1)
                            {
                                if(numarr[z]==ans2[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                            if(q2)
                            {
                                if(numarr[z]==ans1[q])
                                {
                                    flag=1;
                                    break;
                                }
                            }
                        }

                    }
                    if(flag==0)
                    {
                        //cout<<numarr[i]<<" "<<numarr[j]<<" "<<numarr[z]<<endl;
                        myans[q].push_back(numarr[i]);
                        myans[q].push_back(numarr[j]);
                        myans[q].push_back(numarr[z]);
                        myAns.push_back(myans[q]);
                        q++;
                        ans1[ans]=numarr[i];
                        ans2[ans]=numarr[j];
                        ans3[ans]=numarr[z];
                        ans++;
                    }
                    flag=0;
                }
            }
        }
    }
        return myAns;

    }
};