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;
vector<vector<int> > ans;
vector<pair<int, int> > a;
int x = 1;
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int y;
    cin >> y;
    a.push_back({y, i});
  }
  sort(a.begin(), a.end());
  reverse(a.begin(), a.end());
  vector<int> la;
  vector<int> emp;
  ans.assign(n + 2, emp);
  for (int i = 0; i < a[0].first; i++) {
    la.push_back(x++);
    ans[a[0].second].push_back(x - 1);
  }
  for (int i = 1; i < n; i++) {
    if (la.size() > 3) {
      if (i == n - 1) {
        int nx = a[i + 1].first;
        int cu = a[i].first;
        int sz = la.size();
        int las = 0;
        for (int u = 1; (u < cu) && (u < sz - 1); u++) {
          las = u;
        }
        int last = la[sz - las - 1];
        int fin = la[sz - 1];
        for (int j = 0; j <= las; j++) {
          ans[a[i].second].push_back(la[sz - j - 1]);
          la.pop_back();
        }
        la.push_back(last);
        for (int j = 0; j < cu - las - 1; j++) {
          ans[a[i].second].push_back(x);
          la.push_back(x);
          x++;
        }
        la.push_back(fin);
      } else {
        int nx = a[i + 1].first;
        int cu = a[i].first;
        int sz = la.size();
        int las = 0;
        for (int u = 1; (u < cu) && (u < sz - 1); u++) {
          if (sz - u + cu - u >= nx) {
            las = u;
          }
        }
        int last = la[sz - las - 1];
        int fin = la[sz - 1];
        for (int j = 0; j <= las; j++) {
          ans[a[i].second].push_back(la[sz - j - 1]);
          la.pop_back();
        }
        la.push_back(last);
        for (int j = 0; j < cu - las - 1; j++) {
          ans[a[i].second].push_back(x);
          la.push_back(x);
          x++;
        }
        la.push_back(fin);
      }
    } else {
      if (i == n - 1) {
        ans[a[i].second].push_back(la[0]);
        ans[a[i].second].push_back(la[1]);
        ans[a[i].second].push_back(x++);
        la.push_back(x);
      } else {
        ans[a[i].second].push_back(la[0]);
        ans[a[i].second].push_back(la[1]);
        ans[a[i].second].push_back(x);
        i++;
        ans[a[i].second].push_back(la[0]);
        ans[a[i].second].push_back(la[2]);
        ans[a[i].second].push_back(x);
        int x2 = la[2];
        int x1 = la[1];
        x++;
        la.clear();
        la.push_back(x1);
        la.push_back(x2);
        la.push_back(x - 1);
      }
    }
  }
  cout << x - 1 << endl;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < ans[i].size(); j++) {
      cout << ans[i][j] << " ";
    }
    cout << endl;
  }
  return 0;
}