#include <bits/stdc++.h>      using namespace std;      typedef long long ll;   typedef long double ld;      typedef vector<int> vi;   typedef vector<ll> vll;      typedef vector<vi> vvi;   typedef vector<vll> vvll;      typedef pair<int, int> pii;   typedef pair<ll, ll> pll;      typedef vector<pii> vpii;   typedef vector<pll> vpll;      typedef vector<vpii> vvpii;   typedef vector<vpll> vvpll;      #define pb push_back   #define mp make_pair   #define all(x) (x).begin(), (x).end()   #define rall(x) (x).rbegin(), (x).rend()   #define sz(x) (int)(x).size()   #define fi first   #define se second      template<class T> bool ckmin(T &a, const T &b) {return a > b ? a = b, 1 : 0;}   template<class T> bool ckmax(T &a, const T &b) {return a < b ? a = b, 1 : 0;}      namespace debug {       void __print(int x) {cerr << x;}       void __print(long long x) {cerr << x;}       void __print(double x) {cerr << x;}       void __print(long double x) {cerr << x;}       void __print(char x) {cerr <<      << x <<     ;}       void __print(const string &x) {cerr <<     << x <<    ;}       void __print(bool x) {cerr << (x ?  true  :  false );}          template<typename T, typename V>       void __print(const pair<T, V> &x) {cerr <<  { ; __print(x.first); cerr <<  , ; __print(x.second); cerr <<  } ;}       template<typename T>       void __print(const T &x) {int f = 0; cerr <<  { ; for(auto z : x) cerr << (f++ ?  ,  :   ), __print(z); cerr <<  } ;}       void _print() {cerr <<  ] n ;}       template <typename T, typename... V>       void _print(T t, V... v) {__print(t); if(sizeof...(v)) cerr <<  ,  ; _print(v...);}      #ifdef ljuba   #define dbg(x...) cerr <<  LINE(  << __LINE__ <<  ) ->   <<  [  << #x <<  ] = [ ; _print(x)   #else   #define dbg(x...)   #endif   }      using namespace debug;      const char nl =   n ;      mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());      int mat[1000][1000];   int m, k;      bool moze(int n, const vi &v) {       for(int i = 0; i < n; ++i) {           for(int j = 0; j < n; ++j) {               mat[i][j] = -1;           }       }          vpii nz;       for(int i = 0; i < k; ++i) {           if(v[i]) {               nz.pb({v[i], i+1});           }       }       sort(all(nz));          for(int i = 1; i < n; i += 2) {           for(int j = 0; j < n; j += 2) {               if(mat[i][j] != -1) continue;               if(sz(nz) && nz.back().fi > 0) {                   nz.back().fi--;                   mat[i][j] = nz.back().se;                   if(nz.back().fi == 0)                       nz.pop_back();               }           }       }          pii kasnije{-1, -1};          if(sz(nz) && nz.back().fi > 0) {           kasnije = nz.back();           nz.pop_back();       }          dbg(kasnije);          for(int i = 0; i < n; i += 2) {           for(int j = 1; j < n; j += 2) {               if(mat[i][j] != -1) continue;               if(sz(nz) && nz.back().fi > 0) {                   nz.back().fi--;                   mat[i][j] = nz.back().se;                   if(nz.back().fi == 0)                       nz.pop_back();               }           }       }          if(kasnije.fi != -1)           nz.pb(kasnije);          for(int i = 0; i < n; i += 2) {           for(int j = 0; j < n; j += 2) {               if(mat[i][j] != -1) continue;               if(sz(nz) && nz.back().fi > 0) {                   nz.back().fi--;                   mat[i][j] = nz.back().se;                   if(nz.back().fi == 0)                       nz.pop_back();               }           }       }          for(int i = 0; i < n; ++i) {           for(int j = 0; j < n; ++j) {               if(i % 2 == 1 && j % 2 == 1) continue;               if(sz(nz)) {                   nz.back().fi--;                   mat[i][j] = nz.back().se;                   if(nz.back().fi == 0)                       nz.pop_back();               }           }       }          return nz.empty();   }      void solve() {       cin >> m >> k;       vi v(k);       for(auto &z : v) cin >> z;          int mx = *max_element(all(v));       int n = -1;       for(int i = 1; ; ++i) {           ll izraz = i * 1LL * ((i + 1) / 2);           if(mx <= izraz) {               ckmax(n, i);               break;           }       }       for(int i = 1; ; ++i) {           ll izraz = i * 1LL * i;           ll temp = i / 2;           izraz -= temp * 1LL * temp;           if(m <= izraz) {               ckmax(n, i);               break;           }       }          while(!moze(n, v))           ++n;          cout << n << nl;       for(int i = 0; i < n; ++i) {           for(int j = 0; j < n; ++j) {               if(mat[i][j] == -1) mat[i][j] = 0;               cout << mat[i][j] <<    ;           }           cout << nl;       }   }      int main() {       ios::sync_with_stdio(0);       cin.tie(0);       cout.tie(0);      #ifdef ljuba       freopen( input.txt ,  r , stdin);       freopen( output.txt ,  w , stdout);       freopen( error.txt ,  w , stderr);   #endif          int testCases = 1;       cin >> testCases;       while(testCases--)           solve();      }