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;
inline int input() {
  int o;
  char c = getchar();
  while (c > 57 || c < 48) c = getchar();
  for (o = 0; c > 47 && c < 58; c = getchar()) o = (o << 1) + (o << 3) + c - 48;
  return o;
}
struct node {
  int i, edge;
} Poly[101234];
bool comp(node a, node b) { return a.edge > b.edge; }
vector<int> res[101234], now;
int main() {
  int n = input();
  for (int i = 1; i <= n; i++) Poly[i] = (node){i, input()};
  sort(Poly + 1, Poly + n + 1, comp);
  int ni = Poly[1].i, cnt = 0, overlay, edge = Poly[1].edge, wait = 0;
  for (int i = 1; i <= Poly[1].edge; i++)
    now.push_back(++cnt), res[ni].push_back(cnt);
  for (int i = 2, comp; i <= n; i++) {
    if (i == n)
      comp = edge - 3;
    else
      comp = min(edge - 3, (edge + Poly[i].edge - 2 - Poly[i + 1].edge) / 2);
    overlay = min(Poly[i].edge - 2, comp);
    ni = Poly[i].i;
    for (int j = 1; j <= overlay; j++) {
      res[ni].push_back(now.back());
      now.pop_back();
    }
    res[ni].push_back(now.back());
    for (int j = 1; j <= Poly[i].edge - overlay - 2; j++) {
      res[ni].push_back(++cnt);
      now.push_back(cnt);
    }
    if (wait) {
      res[ni].push_back(wait);
      now.push_back(wait);
      wait = 0;
    } else
      res[ni].push_back(now[0]);
    if (Poly[i].edge == 3 && overlay == 0) {
      wait = now.back();
      now.pop_back();
    }
    edge = edge + Poly[i].edge - (overlay << 1) - 2;
  }
  printf("%d\n", cnt);
  for (int i = 1; i <= n; i++) {
    for (auto j : res[i]) printf("%d ", j);
    putchar('\n');
  }
}