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>
#include <bits/stdc++.h>
int pp[300000], n, cnt;
void connect(int *qq, int a, int b) {
  int h, j, k;
  k = 0;
  for (h = cnt - 1; h >= cnt - b; h--) qq[k++] = pp[h];
  j = pp[cnt - 1];
  cnt -= b - 1;
  for (h = 0; h < a - b; h++) qq[k++] = pp[cnt++] = n++;
  pp[cnt++] = j;
}
int main() {
  static int aa[300000], hh[300000], *qq[300000];
  int f, g, h, h_, tmp, sum, odd;
  scanf("%d", &f);
  odd = 0;
  for (h = 0; h < f; h++) {
    scanf("%d", &aa[h]);
    hh[h] = h;
    if (aa[h] > 3) odd ^= aa[h] & 1;
  }
  h_ = 0;
  for (h = 1; h < f; h++)
    if (aa[h_] < aa[h]) h_ = h;
  tmp = hh[0], hh[0] = hh[h_], hh[h_] = tmp;
  for (h = 0; h < f; h++)
    qq[hh[h]] = (int *)malloc(aa[hh[h]] * sizeof *qq[hh[h]]);
  sum = 0;
  for (h = 1; h < f; h++)
    if (aa[hh[h]] > 3) sum += aa[hh[h]] - 2;
  for (g = 0; g < aa[hh[0]]; g++) qq[hh[0]][g] = pp[cnt++] = n++;
  if (aa[hh[0]] - sum >= 3) {
    for (h = 1; h < f; h++) {
      int a = aa[hh[h]];
      if (a > 3) connect(qq[hh[h]], a, a);
    }
  } else if (odd) {
    for (h = 1; h < f; h++) {
      int a = aa[hh[h]];
      if (a > 3) {
        sum -= a - 2;
        if (cnt + a - 4 - sum < 3)
          connect(qq[hh[h]], a, 3);
        else {
          int x;
          x = (cnt + a - sum - 3) / 2 + 1;
          connect(qq[hh[h]], a, x);
          break;
        }
      }
    }
    for (h++; h < f; h++) {
      int a = aa[hh[h]];
      if (a > 3) connect(qq[hh[h]], a, a);
    }
  } else {
    for (h = 1; h < f; h++) {
      int a = aa[hh[h]];
      if (a > 3) {
        sum -= a - 2;
        if (cnt + a - 4 - sum < 4)
          connect(qq[hh[h]], a, 3);
        else {
          int x;
          x = (cnt + a - sum - 4) / 2 + 1;
          connect(qq[hh[h]], a, x);
          break;
        }
      }
    }
    for (h++; h < f; h++) {
      int a = aa[hh[h]];
      if (a > 3) connect(qq[hh[h]], a, a);
    }
  }
  for (h = 1; h < f; h++) {
    int a = aa[hh[h]];
    if (a == 3)
      if (cnt > 3)
        connect(qq[hh[h]], a, 3);
      else {
        int tmp;
        connect(qq[hh[h]], a, 2);
        tmp = pp[0], pp[0] = pp[1], pp[1] = pp[2], pp[2] = pp[3], pp[3] = tmp;
      }
  }
  printf("%d\n", n);
  for (h = 0; h < f; h++) {
    for (g = 0; g < aa[h]; g++) printf("%d ", qq[h][g] + 1);
    printf("\n");
  }
  return 0;
}
