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 maxn = 333333, mod = 998244353;
inline long long read() {
  char ch = getchar();
  long long x = 0, f = 0;
  while (ch < '0' || ch > '9') f |= ch == '-', ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return f ? -x : x;
}
inline int qpow(int a, int b) {
  int ans = 1;
  for (; b; b >>= 1, a = 1ll * a * a % mod)
    if (b & 1) ans = 1ll * ans * a % mod;
  return ans;
}
int n, a[maxn], q[maxn], h = 1, r, tot;
pair<int, int> p[maxn];
vector<int> v[maxn];
map<pair<int, int>, bool> vis;
int main() {
  n = read();
  for (int i = (1); i <= (n); i++) a[i] = read(), p[i] = make_pair(a[i], i);
  sort(p + 1, p + n + 1);
  int sz = p[n].first;
  for (int i = (1); i <= (sz); i++) v[p[n].second].push_back(q[++r] = ++tot);
  for (int i = (1); i <= (sz - 1); i++)
    vis[make_pair(i, i + 1)] = vis[make_pair(i + 1, i)] = true;
  vis[make_pair(1, sz)] = vis[make_pair(sz, 1)] = true;
  for (int ii = (n - 1); ii >= (1); ii--) {
    int i = p[ii].second, res = ii == 1 ? 3 : p[ii - 1].first, x = 0;
    if ((r - h + 1) + a[i] - 2 * (a[i] - 1) >= res)
      x = a[i] - 1;
    else
      x = ((r - h + 1) + a[i] - res) / 2;
    if (x == a[i] - 1 && vis[make_pair(q[r], q[r - x + 1])]) q[++r] = q[h], h++;
    for (int j = (r); j >= (r - x + 1); j--) v[i].push_back(q[j]);
    int tmp = q[r];
    r -= x;
    v[i].push_back(q[r]);
    for (int j = (1); j <= (a[i] - x - 1); j++) v[i].push_back(q[++r] = ++tot);
    q[++r] = tmp;
    for (int j = (0); j <= (a[i] - 2); j++)
      vis[make_pair(v[i][j], v[i][j + 1])] =
          vis[make_pair(v[i][j + 1], v[i][j])] = true;
    vis[make_pair(v[i][0], v[i][a[i] - 1])] =
        vis[make_pair(v[i][a[i] - 1], v[i][0])] = true;
  }
  printf("%d\n", tot);
  for (int i = (1); i <= (n); i++) {
    for (int j = (0); j <= (a[i] - 1); j++) printf("%d ", v[i][j]);
    puts("");
  }
}