Language: C++

#include <bits/stdc++.h> 
using namespace std;
#define rep(i, N) for(int i=0; i<N; i++)
typedef long long ll;
#define dump(x) cerr<<#x<<"="<<x<<endl
using P = pair<int, int>;

ll mod = 1e9+7;

int main() {
   ll n, k; cin >> n >> k;
   vector<ll> a(n);
   bool minus = true;
   rep(i, n){
      cin >> a.at(i);
      if(a.at(i)>=0) minus = false; 
   }

   if(minus){
      ll ans = 1;
      sort(a.begin(), a.end());
      if(k%2!=0){
         sort(a.rbegin(), a.rend());
      }
      rep(i, k){
         ans *= (mod+a.at(i));
         ans %= mod;
      }
      cout << ans << endl;
      return 0;
   }

   vector<pair<ll, ll>> c;
   rep(i, n){
      int tt = 1;
      if(a.at(i)<0) tt=0;
      c.push_back(make_pair((ll)abs(a.at(i)), tt));
   }

   sort(c.rbegin(), c.rend());
   ll ans1 = 1;
   int t = 1;
   rep(i, k){
      ans1 *= (c.at(i).first);
      ans1 %= mod;
      t ^= c.at(i).second;
      t = !t;
   }

   dump(1);
   if(k==1){
      sort(a.rbegin(), a.rend());
      cout << a.at(0) << endl;
      return 0;
   }

   if(n==k){
      ll ans7 = 1;
      rep(i, n){
         ans7 *= (mod+a.at(i));
         ans7 %= mod;
      }
      cout << ans7 << endl;
      return 0;
   }

   dump(2);
   if(t==1){
      dump(3);
      cout << ans1 << endl;
      return 0;
   }
   else{
      dump(4);
      bool minus1 = true;
      rep(i, k){
         if(c.at(i).second==1){
            minus1 = false;
         }
      }
      if(minus1){
         dump(5);
         ll ans3 = 1;
         rep(i, k-1){
            ans3 *= (c.at(i).first);
            ans3 %= mod;
         }
         for(int i=k; i<n; i++){
            if(c.at(i).second){
               ans3 *= (c.at(i).first);
               ans3 %= mod;
               break;
            }
         }
         cout << ans3 << endl; 
         return 0;
      }
      else{
         ll ans4 = 1;
         ll ans5 = 1;
         int id0 = -1, id1 = -1;
         rep(i, k){
            if(c.at(i).second){
               id0 = i;
            }
            else{
               id1 = i;
            }
         }

         rep(i, k){
            if(i!=id0) ans4 *= (c.at(i).first); 
            if(i!=id1) ans5 *= (c.at(i).first);
            ans4 %= mod;
            ans5 %= mod;
         }

         int id2=-1, id3=-1;
         for(int i=k; i<n; i++){
            if(c.at(i).second==0){
               ans4 *= (c.at(i).first);
               ans4 %= mod;
               id2 = i;
               break;
            }
         }
         
         for(int i=k; i<n; i++){
            if(c.at(i).second) {
               ans5 *= (c.at(i).first);
               ans5 %= mod;
               id3 = i;
               break;
            }
         }

         if(id2==-1){
            cout << ans5 << endl;
            return 0;
         }
         
         if(id3==-1){
            cout << ans6 << endl; 
            return 0;
         }

         if(c.at(id3).first*c.at(id0).first > c.at(id1).first * c.at(id2).first){
            cout << ans5 << endl;
         }
         else{
            cout << ans4 << endl;
         }
         return 0;
      }
   }



   return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:143:21: error: 'ans6' was not declared in this scope; did you mean 'ans5'?
  143 |             cout << ans6 << endl;
      |                     ^~~~
      |                     ans5