#ifdef NACHIA #define _GLIBCXX_DEBUG #else #define NDEBUG #endif #include #include #include #include #include using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i void chmin(A& l, const A& r){ if(r < l) l = r; } template void chmax(A& l, const A& r){ if(l < r) l = r; } #include using Modint = atcoder::static_modint<998244353>; using namespace std; void testcase(){ i64 N, M; cin >> N >> M; vector> dp(1< E(N); rep(i,N) cin >> E[i]; vector V(M), W(M); rep(i,M) cin >> V[i] >> W[i]; pair maxvalue = { 0,0 }; rep(i,1<> ans(N); i64 p = maxvalue.second; while(p){ auto [a,b,c] = dp[p]; ans[a].push_back(c); p -= 1 << c; } cout << maxvalue.first << endl; rep(i,N){ cout << ans[i].size(); for(auto a : ans[i]){ cout << ' ' << (a+1); } cout << endl; } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); testcase(); return 0; }