#include<bits/stdc++.h>
using namespace std;
#define pb push_back
using pii=pair<int,int>;
const int lim=15010;
int a[lim],b[lim];
int bad[lim],past1[lim];
int good[lim],past2[lim];
int main(){
  int n;
  cin>>n;
  int sm=0;
  int mx=0;
  for(int i=0;i<n;i++)cin>>a[i],sm+=a[i],mx=max(mx,a[i]);
  int m;
  cin>>m;
  for(int i=0;i<m;i++)cin>>b[i];
  for(int i=1;i<lim;i++){
    bad[i]=INT_MIN;
    good[i]=INT_MAX;
  }
  for(int i=0;i<sm;i++){
    if(bad[i]!=INT_MIN){
      for(int j=0;j<m;j++){
        if(sm<i+b[j])break;
        if(bad[i+b[j]]<bad[i]+1){
          bad[i+b[j]]=bad[i]+1;
          past1[i+b[j]]=b[j];
        }
        if(good[i]+1<good[i+b[j]]){
          good[i+b[j]]=good[i]+1;
          past2[i+b[j]]=b[j];
        }
      }
    }
  }
  if(good[sm]==INT_MAX){
    cout<<-1;
    return 0;
  }
  vector<pii>totr;
  for(int i=0;i<=sm;i++){
    if(bad[i]!=INT_MIN&&good[sm-i]!=INT_MAX&&mx<=bad[i]+good[sm-i]){
      totr.pb({bad[i]+good[sm-i],i});
    }
  }
  sort(totr.begin(),totr.end());
  auto f=[&](int t,int pr) -> bool {
    vector<int>willdo;
    int ss=totr[t].second;
    while(ss){
      willdo.pb(past1[ss]);
      ss-=past1[ss];
    }
    ss=sm-totr[t].second;
    while(ss){
      willdo.pb(past2[ss]);
      ss-=past2[ss];
    }
    int b[n];
    for(int i=0;i<n;i++)b[i]=a[i];
    priority_queue<pii>pq;
    for(int i=0;i<n;i++)pq.push({b[i],i});
    for(int sz:willdo){
      if(pr)cout<<sz<<' ';
      vector<int>used;
      while(sz--){
        auto[x,y]=pq.top();
        pq.pop();
        if(pr)cout<<y+1<<' ';
        used.pb(y);
        b[y]--;
      }
      if(pr)cout<<'\n';
      for(int j:used){
        pq.push({b[j],j});
      }
    }
    for(int i=0;i<n;i++)if(b[i])return 0;
    return 1;
  };
  for(int i=0;i<totr.size();i++){
    if(f(i,0)){
      f(i,1);
      return 0;
    }
  }
  cout<<-1;
}
| # | 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... |