#include using namespace std; typedef long long ll; typedef long double lf; const int maxn = 1020, maxm = 1020; int T, n, m; int L[maxm], U[maxm], a[maxn][maxm]; ll A[maxn], tmp[maxn]; int num_inv(int l, int r) { if (l == r) return 0; int mid = (l + r) >> 1, ans = num_inv(l, mid) + num_inv(mid + 1, r); int i = l, j = mid + 1, k = l; while (i <= mid || j <= r) if (i <= mid && (j > r || A[i] >= A[j])) tmp[k++] = A[i++], ans += (j - mid - 1); else tmp[k++] = A[j++]; for (i = l; i <= r; i++) A[i] = tmp[i]; return ans; } int ans[1234], best[1234], score; int eval() { for (int i = 1; i <= n; i++) { A[i] = 0; for (int j = 1; j <= m; j++) A[i] += 1ll * ans[j] * a[i][j]; } return num_inv(1, n); } int evaluate() { int cur = eval(); if (cur < score) { score = cur; for (int i = 1; i <= m; i++) best[i] = ans[i]; return 1; } return 0; } void gao() { int i; for (i = 1; i <= m; i++) ans[i] = rand() % (U[i] - L[i] + 1) + L[i]; evaluate(); for (int j = 1; j <= 800; j++) { i = rand() % m + 1; int k = ans[i]; ans[i] = rand() % (U[i] - L[i] + 1) + L[i]; if (!evaluate()) ans[i] = k; } } int total = 0; int main() { scanf("%d", &T); while (T--) { score = 1000000000; scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) scanf("%d %d", &L[i], &U[i]); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) scanf("%d", &a[i][j]); gao(); total += score + 100; for (int i = 1; i <= m; i++) printf("%d ", best[i]); printf("\n"); } return 0; }