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

#define int           long long
#define S             second
#define F             first
#define pb            push_back
#define all(c)        (c).begin(),(c).end()
#define rall(c)       (c).rbegin(),(c).rend() 
#define lb            lower_bound
#define si(c)         (int)((c).size())
#define lcm(a, b)      (a * (b / __gcd(a,b)))  
#define inf           (int)(2e9)
#define endl          '\n'
#define mp            make_pair
#define time(s)       (double(clock()-s)/double(CLOCKS_PER_SEC))
#define debug(args...)    _F(#args, args)
#define vi            std::vector<int>
#define pii           pair<int, int> 
#define vpi           vector<pii >

clock_t start;
mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());

template<typename T> void _F(const char *name, T arg1){
    cerr << name << " = " << arg1 << endl;
}
template<typename T, typename... Args> void _F(const char *names, T arg1, Args... args){
    const char *name = strchr(names, ',');cerr.write(names, name-names) << " = " << arg1 << endl;_F(name+2, args...);
}
template<typename T1, typename T2> istream& operator>>(istream& in, pair<T1, T2> &q){ 
    in >> q.F >> q.S; return in;
}
template<typename T1, typename T2> ostream& operator<<(ostream& out, pair<T1, T2> &q){
    out << q.F << " " << q.S; return out;
}
template< typename T1, typename T2> pair<T1, T2> operator+(pair<T1, T2> p1, pair<T1, T2> p2){
    return {p1.F+p2.F, p1.S+p2.S};
}
template< typename T1, typename T2> pair<T1, T2> operator-(pair<T1, T2> p1, pair<T1, T2> p2){
    return {p1.F-p2.F, p1.S-p2.S};
}

const int N = 75+1;
int dp[N][N];
int n, k;
vi ans1, ans2;

struct Query{
    int a, b, id;
    bool operator <(Query other){
        return mp(b, a) < mp(other.b, other.a);
    }
}a[N];

void PrintSolution(int n, int k){
    if(n == 0)return;
    if(dp[n][k] == dp[n-1][k-1]+a[n].a+(k-1)*a[n].b){
        PrintSolution(n-1, k-1);
        ans1.pb(a[n].id);
    } else {
        PrintSolution(n-1, k);
        ans2.pb(a[n].id);
    }
}

void solve() {
    cin >> n >> k;

    for(int i = 1; i <= n; i++){
        cin >> a[i].a >> a[i].b;
        a[i].id = i;
    }

    sort(a+1, a+n+1);
    memset(dp, 0, sizeof(dp));
    for(int j = 1; j <= k; j++)
        dp[0][j] = -inf;

    for(int i = 1; i <= n; i++){
        for(int j = 0; j <= k; j++){
            dp[i][j] = dp[i-1][j]+(k-1)*a[i].b;
            if(j)dp[i][j] = max(dp[i][j], dp[i-1][j-1]+a[i].a+(j-1)*a[i].b);
        }
    }

    cout << k+(n-k)*2 << endl;
   // cout << dp[n][k] << endl;

    PrintSolution(n, k);

    for(int i = 0; i < si(ans1)-1; i++){
        cout << ans1[i] << " ";
    }
    for(int i = 0; i < si(ans2); i++){
        cout << ans2[i] << " ";
        cout << -ans2[i] << " ";
    }
    cout << ans1.back() << endl;
    ans1.clear();
    ans2.clear();
}

signed main(){

    ios_base::sync_with_stdio(0); 
    cin.tie(0); cout.tie(0);   

    int t = 1;
    start = clock(); 

    cout << fixed << setprecision(20);

    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin); 
    freopen("output.txt", "w", stdout);
    freopen("error.txt", "w", stderr);
    #endif
   
    cin >> t;
    
    for(int i = 1; i <= t; ++i){
        //cout << "Case #" << i << ": "; 
        solve();
        //cout << endl;
    }
    //cerr << time(start);
    return 0;
}
