Language: C++

//----AUTHOR:kkdrummer----/
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
//#include <boost/multiprecision/cpp_int.hpp> 
//using namespace boost::multiprecision; 
using namespace __gnu_pbds;
using namespace std;
typedef    long long                 ll;
typedef    long double               ld;
typedef    unordered_set<ll>         usll;
typedef    unordered_multiset<ll>    umsll;
typedef    multiset<ll>              msll;
typedef    set<ll>                   sll;
typedef    vector<ll>                vll;
typedef    pair<ll,ll>               pll;
typedef    vector<pll>               vpll;
typedef    priority_queue<ll>        pqll;
typedef    vector<int>               vi;
typedef    set<int>                  si;
typedef    multiset<int>             msi;
typedef    unordered_multiset<int>   umsi;
typedef    unordered_set<int>        usi;
typedef    pair<int,int>             pi;
typedef    vector<pi>                vpi;
typedef    priority_queue<int>       pqi;
typedef    tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>   ind_si;
typedef    tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>   ind_sll;
typedef    tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>   ind_msi;
typedef    tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update>   ind_msll;
#define    in          insert
#define    fi          first
#define    se          second
#define    pb          push_back
#define    mp          make_pair
#define    be          begin
#define    en          end
#define    itr         iterator
#define    io          ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define    mo          1000000007
#define    inf         9222372026854775807
#define    ninf        -inf
#define    ima         2047483647
#define    imi         -ima
#define    oncnt       __builtin_popcount
#define    zerobegin   __builtin_clz
#define    zeroend     __builtin_ctz
#define    parity      __builtin_parity
#define    all(x)      x.be(),x.en()
#define    eps         1e-9
#define    coutd       cout<<setprecision(12)<<fixed
#define    mems(dp,x)  memset(dp,x,sizeof(dp))
#define    fbo         find_by_order
#define    ook         order_of_key
#define    upb         upper_bound
#define    lowb        lower_bound 
#define    lte(v,x)    upb(all(v),x)-v.be()
#define    gte(v,x)    v.end()-lowb(all(v),x)
#define    gt(v,x)     v.en()-upb(all(v),x)
#define    lt(v,x)     lowb(all(v),x)-v.be()
const      ld PI=      3.1415926535897932384626433832792884197169399375105820974944;
inline ll modpow(ll x,ll n){if(n==0)return 1;if(x==0)return 0;if(n==1)return(x%mo);ll u=(modpow(x,n/2));u=(u*u)%mo;if(n%2!=0)u=(u*x%mo)%mo;return u;}
inline ll modinv(ll x){return modpow(x,mo-2);}


inline ll mmul(ll a,ll b){if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;if(a*b>=mo)return(a*b)%mo;return(a*b); }
inline ll madd(ll a, ll b){if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;if(a+b>=mo)return(a+b)%mo;return(a+b);}
inline ll msub(ll a, ll b){if(a>=mo)a=a%mo;if(b>=mo)b=b%mo;return(((a-b)%mo+mo)%mo);}
inline ll mdiv(ll a,ll bb){if(a>=mo)a=a%mo;ll b=modinv(bb);if(b>=mo)b=b%mo;if(a*b>=mo)return(a*b)%mo;return(a*b);}
inline ll gcd(ll a,ll b){return __gcd(a,b);}
inline ll lcm(ll a,ll b){return (a*b)/gcd(a,b);}
 

 
int main()
{             io 
int testcases=1;           //          cin>>testcases;
while(testcases--)
{
 
int n,k;
cin>>n>>k;

ll a[n];

int ne=0,po=0;

pqll nep,pop;
ll nops=1;
for(int i=0;i<n;i++)
{cin>>a[i];

nops=mmul(nops,(a[i]));
if(a[i]>=0)
{po++;pop.push(a[i]);}
else
{ne++;nep.push(-a[i]);}
}

if(n==k)
{
	cout<<nops;
	return 0;
}

sort(a,a+n);


if(po==0)
{
	if(k%2==0)
	{
		ll ans=1;
		for(int i=0;i<k;i++)
		{
			ans=mmul(ans,abs(a[i]));
		}
		cout<<ans;
		return 0;
	}
	
	else
	{ll ans=1;
		for(int i=0;i<k;i++)
		{
			ans=mmul(ans,abs(a[n-i-1]));
		}
		cout<<modd(-ans);
		return 0;
	}
}

if(ne==0)
{
	ll ans=1;
		for(int i=0;i<k;i++)
		{
			ans=mmul(ans,a[n-i-1]);
		}
		cout<<ans;
		return 0;
}



ll ans=1;
while(k>0)
{
	if(nep.size()<2)
	{
		while(k--)
		{
			ans=mmul(ans,pop.top());
			pop.pop();
		}
		break;
	}
	
	ll n1=nep.top();
	nep.pop();
	ll n2=nep.top();
	nep.pop();
	
	if(pop.size()==0)
	{
		
			ans=mmul(ans,mmul(n1,n2));
			k-=2;
			int h=k;
			if(h%2==1)
			k--;
			while(k--)
			{
				ans=mmul(ans,nep.top());
				nep.pop();
			}
			
			ll nlp=1;
			while(!nep.empty())
			{
				nlp=nep.top();
				nep.pop();
				
			}
			ans=mmul(ans,nlp);
			ans=modd(-ans);
			
		break;
		
	}
	
	if(pop.size()==1)
	{
		ans=mmul(ans,pop.top());
		pop.pop();
		k--;
		continue;
	}
	
	ll p1=pop.top();
	pop.pop();
	ll p2=pop.top();
	pop.pop();
	
	if(n1*n2>=p1*p2)
	{
		ans=mmul(ans,mmul(n1,n2));
		k-=2;
		pop.push(p1);
		pop.push(p2);
		
	}
	else
	{
		ans=mmul(ans,mmul(p1,1));
		k-=1;
		nep.push(n1);
		nep.push(n2);
		pop.push(p2);
	}
}


cout<<ans;
















































 
 
 
 
 
}return 0;}

Compiler output:
a.cc: In function 'int main()':
a.cc:127:23: error: 'modd' was not declared in this scope; did you mean 'modf'?
  127 |                 cout<<modd(-ans);
      |                       ^~~~
      |                       modf
a.cc:185:29: error: 'modd' was not declared in this scope; did you mean 'modf'?
  185 |                         ans=modd(-ans);
      |                             ^~~~
      |                             modf