#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(x) x.begin() , x.end() #define fi first #define se second #define pb push_back #define umax( x , y ) x = max( x , (y) ) #define umin( x , y ) x = min( x , (y) ) #define For( i , a ) for(int i=1;i<=a;i++) #define ort (b+s)/2 #define y2 asrwjaelkf #define y1 asseopirwjaelkf #define set multiset using namespace std; inline int read() { int res = 0 ;int neg ; while(true){char ch = getchar();if(ch>='0' && ch<='9' || ch=='-'){if(ch=='-') neg = -1;else neg = 1 , res = ch-'0';break;} } while(true){char ch = getchar();if(ch>='0' && ch<='9') res*=10 , res+=ch-'0';else break;} return res*neg; } typedef long long Lint; typedef double db; typedef pair ii; typedef pair dd; typedef pair di; typedef pair iii; typedef pair i4; const int maxn = 100020; const int maxm = 1000020; const int MOd = 1e9 + 7; int a, b, f, c; Lint top[maxn]; vector w[maxn]; void dfs( int n, int l ) { if( n > a + 1 ) return ; if( n > l ) { for(int i=2;i=1;i--) { if( top[i] >= f && top[i+1]+(a-i) >= b && top[a-1]-top[i-1] >= c ) { dfs( 1, i+1 ); assert( !b && !f && !c ); //printf("asd %d %d %d\n",b,f,c); printf("%d\n",a+1); for(int j=1;j<=a+1;j++) { printf("%d ",w[j].size()); for(int k=0;k