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 MAXF = 1.1e5;
int F;
int st[MAXF];
int en[MAXF];
list<int> A[MAXF];
const int MAXV = 3.1e5;
int V;
int par[MAXV];
int realPar[MAXV];
int getPar(int a) { return par[a] == -1 ? a : (par[a] = getPar(par[a])); }
bool merge(int a, int b) {
  a = getPar(a), b = getPar(b);
  if (a == b) return false;
  par[b] = a;
  return true;
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> F;
  for (int i = 0; i < F; i++) {
    int a;
    cin >> a;
    st[i] = V;
    A[i] = list<int>(a);
    iota(A[i].begin(), A[i].end(), V);
    V += a;
    en[i] = V;
  }
  memset(par, -1, sizeof(par));
  sort(A, A + F, [&](const list<int>& a, const list<int>& b) {
    return a.size() < b.size();
  });
  for (int i = F - 2; i >= 0; i--) {
    if (A[i + 1].size() > A[i].size()) {
      swap(A[i + 1], A[i]);
    }
    assert(A[i].size() >= A[i + 1].size());
    int tgt = (i ? int(A[i - 1].size()) : 3);
    if (tgt % 2 != (int(A[i].size()) + int(A[i + 1].size())) % 2) {
      tgt++;
    }
    tgt = max(tgt, int(A[i].size()) - int(A[i + 1].size()) + 2);
    assert(tgt < int(A[i].size()) + int(A[i + 1].size()));
    int numMerge = (int(A[i].size()) + int(A[i + 1].size()) - tgt) / 2;
    auto it = A[i + 1].begin();
    for (int z = 0; z < numMerge; z++) {
      merge(A[i].back(), *it);
      A[i].pop_back();
      ++it;
    }
    --it;
    A[i].insert(A[i].end(), it, A[i + 1].end());
    merge(*A[i].begin(), *A[i].rbegin());
    A[i].erase(A[i].begin());
    assert(int(A[i].size()) == tgt);
  }
  int N = 0;
  for (int i = 0; i < V; i++) {
    if (par[i] == -1) {
      realPar[i] = ++N;
    }
  }
  cout << N << '\n';
  for (int i = 0; i < F; i++) {
    for (int v = st[i]; v < en[i]; v++) {
      cout << realPar[getPar(v)] << ' ';
    }
    cout << '\n';
  }
  return 0;
}