protected function createIntersections() {
    $totalNumberOfCombinations = min(pow(2, $this->arraysSize), $this->maxNumberOfCombinations);
    $maskGenerator = new BitMaskGenerator($this->arraysSize, 2);
    $i = 0;
    $noresult = 0;
    while ($i < $totalNumberOfCombinations && $noresult < $totalNumberOfCombinations && $mask = $maskGenerator->getNextMask()) {
      if (!$this->isNoResultMask($mask)) {
        $i++;
        $this->generateIntersection($mask);
        continue;
      }
      $noresult++;
    }

    if (!is_null($this->intersections)) {
      uasort($this->intersections, function ($a, $b) {
        return count($b) - count($a);
      });
    }
  }