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;
deque<int> cur[100006], fr[100005];
int idcnt = 0;
int fa[300005];
int gfa(int a) {
  if (fa[a] == a) return a;
  return fa[a] = gfa(fa[a]);
}
void otp(vector<int> a) {
  for (auto v : a) cout << v << ' ';
  cout << endl;
}
priority_queue<pair<int, int> > s;
int id[300005];
int main() {
  int n;
  const int test = 0;
  if (test)
    n = 3334;
  else
    cin >> n;
  for (int i = 1; i <= n; i++) {
    int ns;
    if (test)
      if (i < n)
        ns = 3;
      else
        ns = 290000;
    else
      scanf("%d", &ns);
    for (int j = 0; j < ns; j++)
      idcnt++, cur[i].push_back(idcnt), fr[i].push_back(idcnt);
    s.push(make_pair(ns, i));
  }
  for (int i = 1; i <= idcnt; i++) fa[i] = i;
  while (s.size() > 1) {
    pair<int, int> u1 = s.top();
    s.pop();
    pair<int, int> u2 = s.top();
    s.pop();
    int ls = 3;
    if (s.size()) ls = s.top().first;
    fa[gfa(cur[u2.second].front())] = gfa(cur[u1.second].front());
    int b1 = cur[u2.second].front(), b2 = 0;
    cur[u2.second].pop_front(), cur[u1.second].pop_front();
    int ur = u1.first + u2.first, tm = 1;
    while (tm < u2.first && (ur - 2) >= ls) {
      fa[gfa(cur[u2.second].front())] = gfa(cur[u1.second].front()), tm++,
      b2 = cur[u2.second].front();
      cur[u2.second].pop_front(), cur[u1.second].pop_front();
      ur -= 2;
    }
    cur[u1.second].push_front(b2);
    while (cur[u2.second].size())
      cur[u1.second].push_front(cur[u2.second].front()),
          cur[u2.second].pop_front();
    cur[u1.second].push_back(b1);
    s.push(make_pair(cur[u1.second].size(), u1.second));
  }
  int cnt = 0;
  for (int i = 1; i <= idcnt; i++)
    if (fa[i] == i) id[i] = ++cnt;
  printf("%d\n", cnt);
  for (int i = 1; i <= n; i++) {
    while (fr[i].size()) {
      printf("%d ", id[gfa(fr[i].front())]);
      fr[i].pop_front();
    }
    printf("\n");
  }
  return 0;
}