#include <bits/stdc++.h>
using namespace std;
int main() {
	int n, tot = 0;
	cin >> n;
	priority_queue<pair<int,int>> pq;
	for(int i=0,a;i<n;i++) {
		cin >> a;
		tot += a;
		pq.push({a,i});
	}
	vector<vector<int>> sol;
	auto add = [&pq,&sol](int s) {
		sol.push_back(vector<int>(s,0));
		vector<pair<int,int>> used;
		for(int i=0;i<s;i++) {
			auto [cnt, idx] = pq.top();
			pq.pop();
			used.push_back({cnt-1,idx});
			sol.back()[i] = idx;
		}
		for(auto i: used)
			pq.push(i);
	};
	int m;
	cin >> m;
	int b[m];
	for(int i=0;i<m;i++)
		cin >> b[i];
	bitset<501> dp[m+1][tot+1];
	dp[0][0][0] = 1;
	for(int i=1;i<=m;i++) {
		memcpy(dp[i],dp[i-1],sizeof(dp[i]));
		for(int j=0;j<tot;j++)
			dp[i][j+1] |= (dp[i][j] << b[i-1]);
	}
	for(int j=pq.top().first;j<=tot;j++)
		if(dp[m][j][tot]) {
			int i1 = m, j1 = j, k1 = tot;
			while(i1) {
				if(j1 && k1 >= b[i1-1] && dp[i1][j1-1][k1-b[i1-1]]) {
					j1--;
					k1 -= b[i1-1];
					add(b[i1-1]);
				} else
					i1--;
			}
			break;
		}
	if(!sol.size()) {
		cout << -1;
		return 0;
	}
	cout << sol.size() << "\n";
	for(auto i: sol) {
		cout << i.size() << " ";
		for(auto j: i)
			cout << j+1 << " ";
		cout << "\n";
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |