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 Ruby (2.7.1) (judge verdict: Accepted)

MODC = 1000000007

n,k = gets.strip.split.map(&:to_i)
a = gets.strip.split.map(&:to_i)
if k != n
  a.sort_by!{|e|e.abs}.reverse!
  zero = false
  mns = 0
  k.times do |i|
    case a[i] <=> 0
    when -1
      mns += 1
    when 0
      zero = true
      break
    end
  end
  if zero
    p 0
    exit
  end
  if mns % 2 != 0
    cntn = true
    k1 = k-1
    k2 = false
    (k-2).downto(0) do |i|
      if a[k1] * a[i] < 0
        k2 = i
        break
      end
    end
    k1a = false
    k.upto(n-1) do |i|
      if a[k1] * a[i] < 0
        k1a = i
        break
      elsif a[i] == 0
        zero = true
        break
      end
    end
    if !k1a && !k2
      if zero
        p 0
        exit
      else
        ans = 1
        k.times do |i|
          ans *= a[n-1-i]
          ans %= MODC
        end
        p ans
        exit
      end
    elsif !k1a
      a[k], a[k2] = a[k2], a[k]
    elsif !k2 || k1a == k
      a[k1], a[k1a] = a[k1a], a[k1]
    elsif (a[k] * a[k1]).abs < (a[k2] * a[k1a]).abs
      a[k1], a[k1a] = a[k1a], a[k1]
    else
      a[k], a[k2] = a[k2], a[k]
    end
  end
end
ans = 1
k.times do |i|
  ans *= a[i]
  ans %= MODC
end
p ans