#include <bits/stdc++.h>   using namespace std;   struct th {     int id, num;     th() { id = 0, num = 0; }     th(int a, int b) { id = a, num = b; }     bool operator<(const th &a) const {       if (num != a.num) return num < a.num;       return id < a.id;     }   };   set<th> x;   vector<int> ns[1000005];   int n, m;   int hp[1000005];   long long dv = 0;   int a[1000005];   long long sm = 0;   void work(int bg, int n) {     if (!n)       return;     else {       if (bg == m) a[bg] = n;       while (1) {         set<th>::iterator t = x.end();         t--;         if ((*t).num < n) break;         th n1 = (*t);         x.erase(n1);         int nd = n1.num / n;         for (int j = bg; j <= m; j++)           for (int tm = 0; tm < nd; tm++) ns[j].push_back(n1.id);         sm -= nd * n;         n1.num %= n;         x.insert(n1);       }       if (bg == m) return;       set<th>::iterator q = x.begin();       int nt = sm / n;       a[bg] = (*q).num;       ns[bg].push_back((*q).id);       x.erase(q);       sm -= nt * a[bg];       if (a[bg]) {         set<th>::iterator t = x.begin();         for (int j = 1; j < nt; j++) {           th q1 = *t;           t++;           x.erase(q1);           ns[bg].push_back(q1.id);           q1.num -= a[bg];           x.insert(q1);         }       }       work(bg + 1, n - a[bg]);     }   }   int main() {     scanf( %d%d , &n, &m);     long long sum = 0;     for (int i = 1; i <= m; i++) {       scanf( %d , &hp[i]);       sum += hp[i];     }     dv = sum / n;     if (sum % n) dv++;     sum = dv * n;     sm = sum;     for (int i = 1; i < m; i++) sum -= hp[i];     hp[m] = sum;     for (int i = 1; i <= m; i++) x.insert(th(i, hp[i]));     work(1, n);     cout << dv << endl;     for (int i = 1; i <= m; i++) printf( %d  , a[i]);     printf(  n );     for (int j = 1; j <= m; j++)       while (ns[j].size() < dv) ns[j].push_back(1);     for (int i = 1; i <= dv; i++) {       for (int j = 1; j <= m; j++) printf( %d  , ns[j][i - 1]);       printf(  n );     }     return 0;   }   