#include<bits/stdc++.h>
#define inf (int)(1 << 30)
#define _ (int)(2e5 + 4)
using namespace std;
int k,n,s,t,m,mxf;
int hd[_], d[_];
int o = 1;
struct ed{
int v,w,ne;
} e[_];
vector<int> g[_];
void add(int u,int v,int w) {
e[++o] = {v,w,hd[u]};
hd[u] = o;
}
int dfs(int u,int mnf) {
if(u == t) return mnf;
int sum = 0;
for(int i = hd[u]; i; i = e[i].ne) {
int v = e[i].v, w = e[i].w;
if(d[v] == d[u] + 1 && w) {
int f = dfs(v, min(mnf,w));
e[i].w -= f, e[i ^ 1].w += f;
mnf -= f, sum += f;
if(mnf == 0) break;
}
}
return sum;
}
bool bfs() {
queue<int> q; memset(d, 0, sizeof(d));
q.push(s), d[s] = 1;
while(!q.empty()) {
int fr = q.front(); q.pop();
for(int i = hd[fr]; i; i = e[i].ne) {
int v = e[i].v, w = e[i].w;
if(!d[v] && w) {
d[v] = d[fr] + 1;
if(v == t) return 1;
q.push(v);
}
}
}
return 0;
}
int main() {
cin >> k >> n;
s = 0, t = k+n+1;
for(int i = 1; i <= k; i ++) {
int nd; cin >> nd;
add(n+i,t,nd), add(t,n+i,0);
m += nd;
}
for(int i = 1; i <= n; i ++) add(s,i,1), add(i,s,0);
for(int i = 1; i <= n; i ++) {
int p; cin >> p;
while(p --) {
int in; cin >> in;
add(i,n+in,1), add(n+in,i,0);
}
}
while(bfs()) {
mxf += dfs(s,inf);
}
if(mxf != m) {
cout << "No Solution!";
return 0;
}
for(int i = 1; i <= n; i ++) {
for(int j = hd[i]; j; j = e[j].ne) {
if(!e[j].w && e[j^1].w) {
g[e[j].v - n].push_back(i);
}
}
}
for(int i = 1; i <= k; i ++) {
cout << i << ":";
for(int j : g[i]) {
cout << j << " ";
}
cout << endl;
}
return 0;
}