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

int a[100001];
pair<int, int> as[100001];
int grid[3001][3001];

int main()
{
	int T;
	cin >> T;
	for (int t = 1; t <= T; t++) {
		int m, k;
		cin >> m >> k;

		int most = 1;
		for (int i = 1; i <= k; i++) {
			cin >> a[i];
			if (a[i] > a[most]) most = i;
			as[i] = {a[i], i};
		}
		sort(as + 1, as + k + 1);

		int ll = 1, rr = min(3000, m);
		int n = -1;
		while (ll <= rr) {
			int mid = (ll + rr) / 2;
			if (mid * mid - (mid / 2) * (mid / 2) >= m && mid * ((mid + 1) / 2) >= a[most]) {
				n = mid;
				rr = mid - 1;
			} else {
				ll = mid + 1;
			}
		}

		if (n == 1) {
			cout << n << '\n';
			cout << as[k].second << '\n';
			continue;
		}

		int r = 1, c = 2;
		int r2 = 2, c2 = 1;
		int r3 = 1, c3 = 1;
		for (int i = k; i >= 1; i--) {
			if (r <= n) {
				for (int j = 1; j <= as[i].first; j++) {
					if (r > n) {
						grid[r3][c3] = as[i].second;
						c3 += 2;
						if (c3 > n) {
							c3 = 1;
							r3 += 2;
						}
					} else {
						grid[r][c] = as[i].second;
						c += 2;
						if (c > n) {
							c = 2;
							r += 2;
						}
					}
				}
			} else {
				for (int j = 1; j <= as[i].first; j++) {
					if (r2 > n) {
						grid[r3][c3] = as[i].second;
						c3 += 2;
						if (c3 > n) {
							c3 = 1;
							r3 += 2;
						}
					} else {
						grid[r2][c2] = as[i].second;
						c2 += 2;
						if (c2 > n) {
							c2 = 1;
							r2 += 2;
						}
					}
				}
			}
		}

		cout << n << '\n';
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				cout << grid[i][j] << ' ';
				grid[i][j] = 0;
			}
			cout << '\n';
		}
	}
}