#include using namespace std; typedef long long ll; // https://en.wikipedia.org/wiki/Edmonds%27_algorithm int levels=0; struct Graph{ int n; vector> edge; vector pi; Graph(int n): n(n) {edge.assign(n,vector(n,1ll<<40ll));} void add_edge(int a,int b,int64_t w){ edge[a][b]=min(edge[a][b],w); } void find_pi(){ pi.resize(n); for (int i=n; i-->1;) for (int j=n; j-->0;) if (i!=j and edge[j][i] find_cycle(){ vector visited(n,-1); visited[0]=0; for (int i=n; i--;){ if (~visited[i]) continue; int x=i; while (!~visited[x]){ visited[x]=i; x=pi[x]; } if (visited[x]==i){ vector res={x}; for (int j=pi[x]; j!=x; j=pi[j]) res.push_back(j); return res; } } return {}; } int64_t solve(){ find_pi(); vector cycle=find_cycle(); ++levels; if (cycle.empty()){ int64_t res=0; for (int i=n; i-->1;){ res+=edge[pi[i]][i]; } return res; } vector keep(n,0); for (auto i: cycle) keep[i]=-1; for (int i=0,j=0; i>n; Graph g(n+1); for (int i=1; i<=n; i++){ int x,t; cin>>x>>t; for (int j=0; j<=n; j++){ cin>>g.edge[j][i]; } if (x!=i){ g.edge[x][i]=t; } } cout<