#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 207
#define maxc 40007
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=1;LoOpEr<=x;LoOpEr++)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int n;
int d[maxn];
int c[maxn][maxn];
int mx[maxn],my[maxn];
int bx[maxn],by[maxn];
int fx[maxn],fy[maxn];
#define residual(i,j) (fx[i]+c[i][j]-fy[j])
void augmenting(int v)
{
int u,k;
while(v>0)
{
k=mx[u=by[v]];
mx[u]=v;
my[v]=u;
v=k;
}
}
bool augment(int u)
{
meset(bx,0);meset(by,0);
fill(d+1,d+n+1,maxc);
queue<int> Q;
Q.push(u),bx[u]=1;
while(Q.size())
{
u=Q.front(),Q.pop();
for(int v=1;v<=n;v++)
if(by[v]) continue;
else if(residual(u,v)==0)
{
d[v]=maxc;
by[v]=u;
if(my[v]==0)
{
augmenting(v);
return true;
}
Q.push(my[v]);
bx[my[v]]=1;
}
else d[v]=min(d[v],residual(u,v));
}
return false;
}
void repair()
{
int dt=*min_element(d+1,d+n+1);
for(int u=1;u<=n;u++) if(!bx[u]) fx[u]+=dt;
for(int v=1;v<=n;v++) if(!by[v]) fy[v]+=dt;
}
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n;
meset(c,127);
int x,y,z;
while(cin>>x>>y>>z) c[x][y]=z;
for(int u=1;u<=n;u++)
while(!augment(u))
repair();
long long ans=0;
for(int u=1;u<=n;u++) ans+=c[u][mx[u]];
cout<<ans<<"\n";
for(int u=1;u<=n;u++) cout<<u<<" "<<mx[u]<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgdGFnICJzcG9qIgojZGVmaW5lIG1heG4gMjA3CiNkZWZpbmUgbWF4YyA0MDAwNwojZGVmaW5lIG9vIDEwMDAwMDAwMDcKI2RlZmluZSBtaWQgKChsK3IpPj4xKQojZGVmaW5lIG1lc2V0KGEseCkgbWVtc2V0KGEseCxzaXplb2YoYSkpCiNkZWZpbmUgbG9vcCh4KSBmb3IoaW50IExvT3BFcj0xO0xvT3BFcjw9eDtMb09wRXIrKykKLy8vPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PgppbnQgbjsKaW50IGRbbWF4bl07CmludCBjW21heG5dW21heG5dOwppbnQgbXhbbWF4bl0sbXlbbWF4bl07CmludCBieFttYXhuXSxieVttYXhuXTsKaW50IGZ4W21heG5dLGZ5W21heG5dOwojZGVmaW5lIHJlc2lkdWFsKGksaikgKGZ4W2ldK2NbaV1bal0tZnlbal0pCiAKdm9pZCBhdWdtZW50aW5nKGludCB2KQp7CiAgICBpbnQgdSxrOwogICAgd2hpbGUodj4wKQogICAgewogICAgICAgIGs9bXhbdT1ieVt2XV07CiAgICAgICAgbXhbdV09djsKICAgICAgICBteVt2XT11OwogICAgICAgIHY9azsKICAgIH0KfQogCmJvb2wgYXVnbWVudChpbnQgdSkKewogICAgbWVzZXQoYngsMCk7bWVzZXQoYnksMCk7CiAgICBmaWxsKGQrMSxkK24rMSxtYXhjKTsKIAogICAgcXVldWU8aW50PiBROwogICAgUS5wdXNoKHUpLGJ4W3VdPTE7CiAKICAgIHdoaWxlKFEuc2l6ZSgpKQogICAgewogICAgICAgIHU9US5mcm9udCgpLFEucG9wKCk7CiAKICAgICAgICBmb3IoaW50IHY9MTt2PD1uO3YrKykKICAgICAgICBpZihieVt2XSkgY29udGludWU7CiAgICAgICAgZWxzZSBpZihyZXNpZHVhbCh1LHYpPT0wKQogICAgICAgIHsKICAgICAgICAgICAgZFt2XT1tYXhjOwogICAgICAgICAgICBieVt2XT11OwogCiAgICAgICAgICAgIGlmKG15W3ZdPT0wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhdWdtZW50aW5nKHYpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICBRLnB1c2gobXlbdl0pOwogICAgICAgICAgICBieFtteVt2XV09MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBkW3ZdPW1pbihkW3ZdLHJlc2lkdWFsKHUsdikpOwogICAgfQogCiAgICByZXR1cm4gZmFsc2U7Cn0KIAp2b2lkIHJlcGFpcigpCnsKICAgIGludCBkdD0qbWluX2VsZW1lbnQoZCsxLGQrbisxKTsKICAgIGZvcihpbnQgdT0xO3U8PW47dSsrKSBpZighYnhbdV0pIGZ4W3VdKz1kdDsKICAgIGZvcihpbnQgdj0xO3Y8PW47disrKSBpZighYnlbdl0pIGZ5W3ZdKz1kdDsKfQppbnQgbWFpbigpCnsKICAgICNpZmRlZiBkbWRkCiAgICBmcmVvcGVuKHRhZyIuaW5wIiwiciIsc3RkaW4pOyBmcmVvcGVuKHRhZyIub3V0IiwidyIsc3Rkb3V0KTsKICAgICNlbmRpZiAvLyBkbWRkCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKIAogICAgY2luPj5uOwogCiAgICBtZXNldChjLDEyNyk7CiAKICAgIGludCB4LHksejsKICAgIHdoaWxlKGNpbj4+eD4+eT4+eikgY1t4XVt5XT16OwogCiAgICBmb3IoaW50IHU9MTt1PD1uO3UrKykKICAgICAgICB3aGlsZSghYXVnbWVudCh1KSkKICAgICAgICAgICAgcmVwYWlyKCk7CiAKICAgIGxvbmcgbG9uZyBhbnM9MDsKICAgIGZvcihpbnQgdT0xO3U8PW47dSsrKSBhbnMrPWNbdV1bbXhbdV1dOwogCiAgICBjb3V0PDxhbnM8PCJcbiI7CiAgICBmb3IoaW50IHU9MTt1PD1uO3UrKykgY291dDw8dTw8IiAiPDxteFt1XTw8IlxuIjsKIAogICAgcmV0dXJuIDA7Cn0=