U392724 [给自己做的题#1]调皮的数列

题目背景

## **~~我 太 难 了~~**

题目描述

还是,来迟了……\ 这里有一个~~脾气暴躁的~~数列 $(m_1,m_2,…,m_i,…,m_{a-1},m_a)$ ,本来131_072已经跟它约定好了观看它的变化,但是因为某些特殊原因,131_072来迟了,并只看到了结束后的数列。\ 那群数字非常生气,告诉131_072,必须要告诉它们,它们刚开始是什么样子。可是131_072只知道它们是怎么变化的: 1. 它们从第一个数字 $m_1$ 开始变化,直到没有数字可以变化 $(下标 ia)$ 为止。 2. $下一步即将变化的数字的下标j=本步变化的数字的下标i+本步变化的数字的数值m_i$。 3. 本步变化的数字的数值自增 $1$(如果数值为 $3$,变为 $-3$)。 4. 就算下一步要结束,**本步变化的数字也要先自增**。\ 现在,它们要131_072把它们所有可能的初始数列按照从小到大的顺序排好序之后告诉它们(从 $m_1$ 开始比较,如果相同,则比较 $m_2$,以此类推)。\ 很显然,131_072现在非常焦虑,请你编个程序解决他的难题。

输入格式

一行,输入 $a$ 个整数 $(n_1,n_2,…,n_i,…,n_{a-1},n_a)$ ,表示结束后的数列。

输出格式

第一行,一个正整数 $N$ , 表示可能的初始数列数量。\ 第 $2$ 行到第 $(N+1)$ 行,每行 $a$ 个用单空格隔开的整数,表示排序好的所有可能的初始数列。

说明/提示

数据保证,$-3\le n_i \le 3 ,1\le a \le20$ ,$ N\le 8192$ 。