Language: C++

#include <bits/stdc++.h>
using namespace std;
typedef long long lol;

//マクロ
//forループ関係
//引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
//Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i,n) for(lol i=0;i<lol(n);i++)
#define REPD(i,n) for(lol i=n-1;i>=0;i--)
#define FOR(i,a,b) for(lol i=a;i<=lol(b);i++)
#define FORD(i,a,b) for(lol i=a;i>=lol(b);i--)
//xにはvectorなどのコンテナ
#define ALL(x) x.begin(),x.end() //sortなどの引数を省略したい
#define SIZE(x) lol(x.size()) //sizeをsize_tからllに直しておく
//定数
#define INF 1000000000000 //10^12:極めて大きい値,∞
#define MOD 1000000007 //10^9+7:合同式の法
#define MAXR 100000 //10^5:配列の最大のrange(素数列挙などで使用)
//最大値最小値
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
int gcd(int a,int b){return b?gcd(b,a%b):a;}

int main()
{
    lol result{0}, sum{1};
    lol n; cin >> n;
    const lol DI = pow(10, 9) + 7;
    int k; cin >> k;
    vector<int> a(n);
    int ap{0}, an{0};
    REP(i, n)
    {
        cin >> a[i];
        if(a[i] > 0)
            ap++;
        else if(a[i] < 0)
            an++;
    }
    sort(ALL(a));
    if(n != k)
    {
        
        if(k % 2 == 0)
        {
            int j1{0}, j2{0};
            REP(i, k/2)
            {
                
                if(a[j1] * a[j1 + 1] <= a[n - j2 - 1] * a[n - j2 - 2])
                {
                    sum *= ( a[n - j2 - 1] * a[n - j2 - 2] % DI );
                    sum %= DI;
                    j2 += 2;
                }
                else
                {
                    sum *= ( a[j1] * a[j1 + 1] % DI );
                    sum %= DI;
                    j1 += 2;
                }
            }
            //cout << sum << endl;
        }
        else if(n != an)
        {
            int j1{0}, j2{0};
            REP(i, k/2)
            {
                
                if(a[j1] * a[j1 + 1] <= a[n - j2 - 1] * a[n - j2 - 2] && j2 != ap - 2)
                {
                    sum *= ( a[n - j2 - 1] * a[n - j2 - 2] % DI );
                    sum %= DI;
                    j2 += 2;
                }
                else
                {
                    sum *= ( a[j1] * a[j1 + 1] % DI );
                    sum %= DI;
                    j1 += 2;
                }
            }
            sum *= a[n - j2 - 1];
            //cout << sum << endl;
        }
        else
        {
            
            REP(i, k)
            {
                sum *= a[n - 1 - i];
                sum %= DI;
            }
        }
        
    }
    else
    {
        //cout << "a" << endl;
        REP(i, k)
        {
            sum *= a[i];
            sum %= DI;
            //cout << sum << endl;
        }
    }

    if(sum < 0)
    {
        result = abs(sum) % DI;
        result = DI - result;
    }
    else
    {
        result = sum % DI;
    }
    
    
    
    /*
    REP(i, n)
        cout << a[i] << " ";
    cout << endl;
    */

    cout << result << endl;
    return 0;

Compiler output:
a.cc: In function 'int main()':
a.cc:129:14: error: expected '}' at end of input
  129 |     return 0;
      |              ^
a.cc:26:1: note: to match this '{'
   26 | {
      | ^