#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>
using namespace std;

int main() {

    vector<int> a = {2,7,4,8,9,1,6};
    int k = 9;

    unordered_map<int,int> first;
    unordered_map<int,int> last;

    first[0] = -1;
    last[0] = -1;

    int sum = 0;

    int longest = INT_MIN;
    int shortest = INT_MAX;

    int maxCount = 0;
    int minCount = 0;

    for(int i = 0; i < a.size(); i++) {

        sum += a[i];
        int ques = sum - k;

        // Longest Subarray
        if(first.find(ques) != first.end()) {

            int len = i - first[ques];

            if(len > longest) {
                longest = len;
                maxCount = 1;
            }
            else if(len == longest) {
                maxCount++;
            }
        }

        // Shortest Subarray
        if(last.find(ques) != last.end()) {

            int len = i - last[ques];

            if(len < shortest) {
                shortest = len;
                minCount = 1;
            }
            else if(len == shortest) {
                minCount++;
            }
        }

        // Store first occurrence
        if(first.find(sum) == first.end())
            first[sum] = i;

        // Store last occurrence
        last[sum] = i;
    }

    if(longest == INT_MIN) {
        cout << "No subarray found";
    }
    else {
        cout << "Longest Length = " << longest << endl;
        cout << "Number of Longest Subarrays = " << maxCount << endl;

        cout << "Shortest Length = " << shortest << endl;
        cout << "Number of Shortest Subarrays = " << minCount << endl;
    }

    return 0;
}