Polycarp plays a computer game. In this game, the players summon armies of magical minions, which then fight each other.

Polycarp can summon $n$ different minions. The initial power level of the $i$-th minion is $a_i$, and when it is summoned, all previously summoned minions' power levels are increased by $b_i$. The minions can be summoned in any order.

Unfortunately, Polycarp cannot have more than $k$ minions under his control. To get rid of unwanted minions after summoning them, he may destroy them. Each minion can be summoned (and destroyed) only once.

Polycarp's goal is to summon the strongest possible army. Formally, he wants to maximize the sum of power levels of all minions under his control (those which are summoned and not destroyed).

Help Polycarp to make up a plan of actions to summon the strongest possible army!


-----Input-----

The first line contains one integer $T$ ($1 \le T \le 75$) — the number of test cases.

Each test case begins with a line containing two integers $n$ and $k$ ($1 \le k \le n \le 75$) — the number of minions availible for summoning, and the maximum number of minions that can be controlled by Polycarp, respectively.

Then $n$ lines follow, the $i$-th line contains $2$ integers $a_i$ and $b_i$ ($1 \le a_i \le 10^5$, $0 \le b_i \le 10^5$) — the parameters of the $i$-th minion.


-----Output-----

For each test case print the optimal sequence of actions as follows:

Firstly, print $m$ — the number of actions which Polycarp has to perform ($0 \le m \le 2n$). Then print $m$ integers $o_1$, $o_2$, ..., $o_m$, where $o_i$ denotes the $i$-th action as follows: if the $i$-th action is to summon the minion $x$, then $o_i = x$, and if the $i$-th action is to destroy the minion $x$, then $o_i = -x$. Each minion can be summoned at most once and cannot be destroyed before being summoned (and, obviously, cannot be destroyed more than once). The number of minions in Polycarp's army should be not greater than $k$ after every action.

If there are multiple optimal sequences, print any of them.


-----Example-----
Input
3
5 2
5 3
7 0
5 0
4 0
10 0
2 1
10 100
50 10
5 5
1 5
2 4
3 3
4 2
5 1

Output
4
2 1 -1 5
1
2
5
5 4 3 2 1



-----Note-----

Consider the example test.

In the first test case, Polycarp can summon the minion $2$ with power level $7$, then summon the minion $1$, which will increase the power level of the previous minion by $3$, then destroy the minion $1$, and finally, summon the minion $5$. After this, Polycarp will have two minions with power levels of $10$.

In the second test case, Polycarp can control only one minion, so he should choose the strongest of them and summon it.

In the third test case, Polycarp is able to summon and control all five minions.

Difficulty: interview

Starter code:

Solutions:
def read_int():
    return int(input())


def read_ints():
    return list(map(int, input().split(' ')))


t = read_int()
for case_num in range(t):
    n, k = read_ints()
    p = []
    for i in range(n):
        ai, bi = read_ints()
        p.append((bi, ai, i + 1))
    p.sort()
    dp = [[0 for j in range(k + 1)] for i in range(n + 1)]
    use = [[False for j in range(k + 1)] for i in range(n + 1)]
    for i in range(1, n + 1):
        for j in range(min(i, k) + 1):
            if i - 1 >= j:
                dp[i][j] = dp[i - 1][j] + (k - 1) * p[i - 1][0]
            if j > 0:
                x = dp[i - 1][j - 1] + (j - 1) * p[i - 1][0] + p[i - 1][1]
                if x > dp[i][j]:
                    dp[i][j] = x
                    use[i][j] = True
    used = []
    curr = k
    for i in range(n, 0, -1):
        if use[i][curr]:
            used.append(p[i - 1][2])
            curr -= 1
    used.reverse()
    seq = used[:-1]
    st = set(used)
    for i in range(1, n + 1):
        if not i in st:
            seq.append(i)
            seq.append(-i)
    seq.append(used[-1])
    print(len(seq))
    print(' '.join(map(str, seq)))


from operator import itemgetter
import sys

int1 = lambda x: int(x) - 1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
def SI(): return sys.stdin.readline()[:-1]

def main():
    inf = 10 ** 9
    for _ in range(II()):
        n, k = MI()
        ab = [(a, b, i) for i, (a, b) in enumerate(LLI(n))]

        dp = [[inf] * n for _ in range(k)]
        log = [[[] for _ in range(n)] for _ in range(k)]
        for e in range(n): dp[0][e] = -ab[e][0]
        ab.sort(key=itemgetter(1))
        for a, b, i in ab:
            for j in range(k - 2, -1, -1):
                for e in range(n):
                    if i==e:continue
                    pre = dp[j][e]
                    if pre==inf:continue
                    cur = pre + b * (k - 1 - j) - a
                    if cur < dp[j + 1][e]:
                        dp[j + 1][e] = cur
                        log[j+1][e]=log[j][e]+[i]
        #print(ab)
        #p2D(dp)
        #p2D(log)
        #print()
        mn=mne=inf
        for e in range(n):
            cur=dp[-1][e]
            if cur<mn:
                mn=cur
                mne=e
        first=log[-1][mne]
        use=[False]*n
        use[mne]=True
        ans=[]
        for i in first:
            ans.append(i+1)
            use[i]=True
        for i in range(n):
            if use[i]:continue
            ans.append(i+1)
            ans.append(-i-1)
        ans.append(mne+1)
        print(len(ans))
        print(*ans)

main()


import sys

readline = sys.stdin.readline
read = sys.stdin.read
ns = lambda: readline().rstrip()
ni = lambda: int(readline().rstrip())
nm = lambda: map(int, readline().split())
nl = lambda: list(map(int, readline().split()))
prn = lambda x: print(*x, sep='\n')


def solve():
    n, k = nm()
    mini = [tuple(nl() + [i+1]) for i in range(n)]
    mini.sort(key = lambda x: x[1])
    # print(mini)
    dp = [-1]*(k+1)
    dp[0] = 0
    f = [[0]*(k+1) for _ in range(n)]
    for i in range(n):
        if dp[k] > 0:
            dp[k] += (k - 1) * mini[i][1]
        for j in range(k-1, -1, -1):
            if dp[j] >= 0:
                if dp[j+1] < dp[j] + mini[i][0] + j * mini[i][1]:
                    dp[j+1] = dp[j] + mini[i][0] + j * mini[i][1]
                    f[i][j+1] = 1
                dp[j] += (k - 1) * mini[i][1]
    
    cx = k
    a = list()
    b = list()
    for i in range(n-1, -1, -1):
        if f[i][cx]:
            a.append(mini[i][2])
            cx -= 1
        else:
            b.append(mini[i][2])
    com = list()
    for x in a[:0:-1]:
        com.append(x)
    for x in b:
        com.append(x)
        com.append(-x)
    com.append(a[0])
    print(len(com))
    print(*com)
    return

T = ni()
for _ in range(T):
    solve()

from typing import List
import sys
input = sys.stdin.readline
import math

############ ---- Input Functions ---- ############
def inp():
    return(int(input()))
def inlt():
    return(list(map(int,input().split())))
def insr():
    s = input().strip()
    return(list(s[:len(s)]))
def invr():
    return(list(map(int,input().strip().split())))



def solve_hungarian(a: List[List[int]], n: int, m: int):
    """
    Implementation of Hungarian algorithm in n^2 m
    """
    # potentials
    u = [0] * (n+1)
    v = [0] * (m+1)

    # pair row of each col
    p = [0] * (m+1)

    # for each col the number of prev col along the augmenting path
    way = [0] * (m+1)


    for i in range(1, n+1):
        p[0] = i
        j0 = 0
        minv = [float('inf')] *  (m+1)
        used = [False] * (m+1)

        # iterative Kun starts here
        condition = True
        while condition:
            # mark the current col as reachable
            used[j0] = True
            i0 = p[j0]
            delta = float('inf')

            # determine which col will become reachable after next potential update
            for j in range(1, m+1):
                if not used[j]:
                    cur = a[i0][j] - u[i0]-v[j]
                    if cur < minv[j]:
                        minv[j] = cur
                        way[j] = j0
                    if minv[j] < delta:
                        delta = minv[j]
                        j1 = j
                        # j1 will hold the col with min
                        # way[j1] - the prev col in dfs

            # update the potential
            for j in range(0, m+1):
                if used[j]: # if col j was discovered:
                    u[p[j]] += delta
                    v[j] -= delta
                else: # not discovered - update min?
                    minv[j] -= delta

            # j0 becomes the col on which the delta is achieved
            j0 = j1
            # p[j0] == 0 => j0 - a col not in matching
            condition = p[j0] != 0

        # the augmenting path was found - update the mapping
        condition = True
        while condition:

            # j1 is the prev column of j0 in augmenting path
            j1 = way[j0]
            p[j0] = p[j1]
            j0 = j1
            condition = j0 != 0

    ans = [0] * (n+1)
    for j in range(1, m+1):
        ans[p[j]] = j

    return -v[0], ans


def solve(n, k, a, b):
    A = [[0] * (n+1) for _ in range(n+1) ]

    for i in range(1, n+1):
        for j in range(1, k+1):
            A[i][j] = a[i] + (j-1) * b[i]
        for j in range(k+1, n+1):
            A[i][j] = (k-1) * b[i]

        # turn into a max problem
    for i, row in enumerate(A):
        M = max(row)
        for j in range(n+1):
            A[i][j] = M - A[i][j]

    cost, match = solve_hungarian(A, n, n)

    print(n + (n-k))

    role_to_creature = list(zip(match, list(range(len(match)))))
    role_to_creature.sort()

    res = []

    for index in range(1, k):
        res.append(role_to_creature[index][1])

    for index in range(k+1, n+1):
        res.append(role_to_creature[index][1])
        res.append(-role_to_creature[index][1])
    res.append(role_to_creature[k][1])
    print(" ".join(map(str, res)))




def from_file(f):
    return f.readline


# with open('test.txt') as f:
#     input = from_file(f)
t = inp()
for _ in range(t):
    n, k = invr()
    a = [0]
    b = [0]
    for _ in range(n):
        ai, bi = invr()
        a.append(ai)
        b.append(bi)
    solve(n, k, a, b)