class Solution {
public:
   vector<vector<int>> fourSum(vector<int>& nums, int target) {
      int len = nums.size();
      sort(nums.begin(), nums.end());
      vector<vector<int>> res;
      for (int a = 0; a < len; ++a)
      {
         if (a && nums[a] == nums[a - 1])continue;
         for (int b = a + 1; b < len - 2; ++b)
         {
            if (b > a + 1 && nums[b] == nums[b - 1])continue;
            int i = b + 1, j = len - 1;
            while (i < j)
            {
               int sum = target - (nums[a] + nums[b]);
               if (nums[i] + nums[j] < sum)++i;
               else if (nums[i] + nums[j] > sum)--j;
               else
               {
                  res.push_back({nums[a], nums[b], nums[i++], nums[j--]});
                  while (i < j && nums[i] == nums[i - 1])++i;
                  while (i < j && nums[j] == nums[j + 1])--j;
               }
            }
         }
      }
      return res;
   }
};