#include <bits/stdc++.h>
using namespace std;
ifstream in("pm2.in");
ofstream out("pm2.out");
long n,m[201],i,j,x;
long d[201],t1[201],t2[201],tmax,viz[201];
set<long>v[200];
queue<int>q;
void dfs(long x){
t2[x]=tmax;
viz[x]=1;
for(auto k:v[x]){
if(viz[k]==0) dfs(k);
t2[x]=min(t2[x],t2[k]);
}
t2[x]=t2[x]-d[x];
}
int main()
{
in>>n;
for(i=1;i<=n;i++) in>>d[i];
for(i=1;i<=n;i++){
in>>m[i];
for(j=1;j<=m[i];j++){
in>>x;
v[x].insert(i);
}
if(m[i]==0){
t1[i]=0;
q.push(i);
}
}
while(!q.empty()){
x=q.front();
q.pop();
tmax=max(tmax,t1[x]+d[x]);
for(auto k:v[x]){
m[k]--;
t1[k]=max(t1[k],t1[x]+d[x]);
if(m[k]==0) q.push(k);
}
}
out<<tmax<<"\n";
for(i=1;i<=n;i++){
if(viz[i]==0){
dfs(i);
}
}
for(i=1;i<=n;i++){
out<<t1[i]<<" "<<t2[i]<<"\n";
}
return 0;
}