Problem: Ujan has finally cleaned up his house and now wants to decorate the interior. He decided to place a beautiful carpet that would really tie the guest room together.

He is interested in carpets that are made up of polygonal patches such that each side of a patch is either a side of another (different) patch, or is an exterior side of the whole carpet. In other words, the carpet can be represented as a planar graph, where each patch corresponds to a face of the graph, each face is a simple polygon. The perimeter of the carpet is the number of the exterior sides. 

Ujan considers a carpet beautiful if it consists of f patches, where the i-th patch has exactly a_i sides, and the perimeter is the smallest possible. Find an example of such a carpet, so that Ujan can order it!

Input

The first line of input contains a single integer f (1 ≤ f ≤ 10^5), the number of patches in the carpet. 

The next line contains f integers a_1, …, a_f (3 ≤ a_i ≤ 3⋅ 10^5), the number of sides of the patches. The total number of the sides of the patches a_1 + … + a_f does not exceed 3⋅10^5.

Output

Output the description of the carpet as a graph. 

First, output a single integer n (3 ≤ n ≤ 3 ⋅ 10^5), the total number of vertices in your graph (the vertices must be numbered from 1 to n). 

Then output f lines containing the description of the faces. The i-th line should describe the i-th face and contain a_i distinct integers v_{i,1}, …, v_{i,a_i} (1 ≤ v_{i,j} ≤ n), which means that the vertices v_{i,j} and v_{i,(j mod{a_i})+1} are connected by an edge for any 1 ≤ j ≤ a_i.

The graph should be planar and satisfy the restrictions described in the problem statement. Its perimeter should be the smallest possible. There should be no double edges or self-loops in the graph. The graph should be connected. Note that a solution always exists; if there are multiple solutions, output any of them.

Examples

Input


2
3 3


Output


4
2 1 4 
1 2 3 


Input


3
5 3 5


Output


6
1 2 3 4 5
4 5 6
1 3 4 6 5

Note

In the first sample, the two triangular faces are connected by a single edge, which results in the minimum perimeter 4.

The figure shows one possible configuration for the second sample. The minimum perimeter in this case is 3. 

<image>

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
int n, nn, a[N], i, j, g[N], id[N], zz;
int gfa(int x) { return g[x] == x ? x : g[x] = gfa(g[x]); }
vector<int> f[N], v;
pair<int, int> aa[N];
vector<int> uni(vector<int> a, vector<int> b, int x) {
  x = a.size() + b.size() - x >> 1;
  int j;
  for (j = 0; j <= x; ++j) g[gfa(a[j])] = gfa(b[j]);
  vector<int> ret = {a[0]};
  for (j = a.size() - 1; j >= x; --j) ret.push_back(a[j]);
  for (j = x + 1; j < b.size(); ++j) ret.push_back(b[j]);
  return ret;
}
vector<int> uni3(vector<int> a, vector<int> b, vector<int> c) {
  g[gfa(a[0])] = g[gfa(b[0])] = gfa(c[0]);
  g[gfa(a[1])] = gfa(b[1]);
  g[gfa(a[2])] = gfa(c[1]);
  g[gfa(b[2])] = gfa(c[2]);
  return {a[1], a[2], b[2]};
}
int calc(int x, int y) {
  if (x < y) swap(x, y);
  return x == y ? 4 : x - y + 2;
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; ++i) {
    scanf("%d", a + i);
    f[i].resize(a[i]);
    for (j = 0; j < a[i]; ++j) f[i][j] = ++nn;
    aa[i] = {a[i], i};
  }
  for (i = 1; i <= nn; ++i) g[i] = i;
  sort(aa + 1, aa + n + 1);
  v = f[aa[n].second];
  int tot = 0;
  for (i = 1; i < n; ++i) tot += aa[i].first - 1;
  if (tot <= aa[n].first - 1 && aa[n].first > 3) {
    int lst = 0, j, p, q, r = aa[n].second;
    for (i = 1; i < n; ++i) {
      tie(p, q) = aa[i];
      for (j = 0; j < p; ++j) g[gfa(f[q][j])] = gfa(f[r][lst++]);
      --lst;
    }
  } else {
    for (i = n - 1; i; --i) {
      if (v.size() == 3) break;
      int x = v.size() - aa[i].first + 2, y = aa[i - 1].first;
      if (v.size() == aa[i].first) x = 4;
      if (x > 4 && x > y) {
        int l1 = v.size(), l2 = aa[i].first;
        for (j = 0; j < l2; ++j)
          g[gfa(f[aa[i].second][j])] = gfa(v[l1 - l2 + j]);
        int tt = v.back();
        for (; v.size() >= l1 - l2 + 2; v.pop_back())
          ;
        v.push_back(tt);
        continue;
      }
      if (x < y) x = (y - x) % 2 == 0 ? y : y + 1;
      v = uni(v, f[aa[i].second], x);
    }
    if (i) {
      vector<int> u = f[aa[1].second];
      for (j = 2; j + 1 <= i; j += 2)
        u = uni3(u, f[aa[j].second], f[aa[j + 1].second]);
      if (j == i) {
        if (v.size() == 3)
          u = uni3(u, f[aa[i].second], v);
        else
          u = uni(u, f[aa[i].second], 4),
          v = uni(u, v, calc(u.size(), v.size()));
      } else
        v = uni(u, v, calc(u.size(), v.size()));
    }
  }
  for (i = 1; i <= nn; ++i)
    if (gfa(i) == i) id[i] = ++zz;
  printf("%d\n", zz);
  for (i = 1; i <= n; ++i) {
    for (int x : f[i]) printf("%d ", id[gfa(x)]);
    puts("");
  }
  return 0;
}