Problem:
Score : 500 points

Problem Statement

Given are N integers A_1,\ldots,A_N.

We will choose exactly K of these elements. Find the maximum possible product of the chosen elements.

Then, print the maximum product modulo (10^9+7), using an integer between 0 and 10^9+6 (inclusive).

Constraints

1 \leq K \leq N \leq 2\times 10^5

|A_i| \leq 10^9

Input

Input is given from Standard Input in the following format:

N K
A_1 \ldots A_N

Output

Print the maximum product modulo (10^9+7), using an integer between 0 and 10^9+6 (inclusive).

Sample Input 1

4 2
1 2 -3 -4

Sample Output 1

12

The possible products of the two chosen elements are 2, -3, -4, -6, -8, and 12, so the maximum product is 12.

Sample Input 2

4 3
-1 -2 -3 -4

Sample Output 2

1000000001

The possible products of the three chosen elements are -24, -12, -8, and -6, so the maximum product is -6.

We print this value modulo (10^9+7), that is, 1000000001.

Sample Input 3

2 1
-1 1000000000

Sample Output 3

1000000000

The possible products of the one chosen element are -1 and 1000000000, so the maximum product is 1000000000.

Sample Input 4

10 10
1000000000 100000000 10000000 1000000 100000 10000 1000 100 10 1

Sample Output 4

999983200

Be sure to print the product modulo (10^9+7).

Solution in C++ (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
#define ll long long
#define endl "\n"

#define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);

#define vi vector<int>
#define vl vector<ll>
#define vvi vector<vector<int>>
#define vvl vector< vector<long long>>
#define mi map<int,int>
#define pi pair<int,int>

#define Fori(i,a,b) for(int i=a; i<b; i++)
#define Ford(i, a, b) for(int i=a; i>=b; i--)

#define pb push_back
#define mp make_pair

#define read(a, n) for(int i=0; i<n; i++) cin >> a[i];
#define print(x) cout << "X: == " << x << endl;
#define printMap(a) for(auto it=a.begin() ; it!= a.end() ; it++) {cout << it->first << "  " << it->second << endl; }
#define printVector(a) for(auto it = a.begin() ; it!= a.end() ;it++) {cout << *it << endl;}
#define M 1000000007
using namespace std;
int main() {
    IOS
    ll n, k;
    cin >> n >> k;
    vl a(n);
    ll positive=0, negative = 0, zero=0;
    Fori(i, 0, n) {
        cin >> a[i];
        if(a[i] > 0){
            positive++;
        } else if(a[i] == 0) {
            zero++;
        } else {
            negative++;
        }
    }
    sort(a.begin(), a.end());
    ll i=0, j=n-1;
    vl b;
    while(k--) {
        if(negative == n) {
            b.push_back(a[j--]);
            continue;
        }  else if(positive == n) {
            b.push_back(a[j--]);
            continue;
        }
        if(k == 0) {
            b.push_back(a[j--]);
            continue;
        }
        ll prod1=1,prod2=1;
        prod1 = a[j] * a[j-1];
        prod2 = a[i] * a[i+1];
        if(prod1 > prod2) {
            b.push_back(a[j--]);
            b.push_back(a[j--]);
            k--;
        } else {
            b.push_back(a[i++]);
            b.push_back(a[i++]);
            k--;
        }
    }
    ll ans = 1;
    Fori(i, 0, b.size()) {
        ans *= b[i];
        if(ans >= 1000000007)
        ans = ans % 1000000007;
    }
    if(ans < 0) {
        ans = 1000000007 + ans;
    }
    cout << ans << endl;
    return 0;
}