因为可以把字母的ASCLL码当作节点编号
#include<bits/stdc++.h>
#define r read()
#define log(a) cerr<<"\033[32m[DEBUG] "<<#a<<'='<<(a)<<" @ line "<<__LINE__<<"\033[0m"<<endl
#define bb printf("!!\n");
#define cc printf("\n");
using namespace std;
inline int read()
{
bool ok=0 ;int res=0;char c;
while(((c=getchar())<'0'||c>'9')&&c!='-');
if(c=='-') ok=1;else res=c-48;
while((c=getchar())>='0'&&c<='9')res=(res<<3)+(res<<1)+(c-48);
return ok ? ~res + 1:res;
}
const int N=4e5,M=4e5;
int h[N],net[M],go[M],val[M],dep[N],ecnt=1,cap[M];
void add(int u,int v,int w){go[++ecnt]=v;cap[ecnt]=w;net[ecnt]=h[u];h[u]=ecnt;swap(u,v);go[++ecnt]=v;cap[ecnt]=0;net[ecnt]=h[u];h[u]=ecnt;}
int s,t,n,m;
int bfs()
{
memset(dep,0,sizeof(dep));
queue<int>q;
q.push(s);
dep[s]=1;
while(!q.empty())
{
int u=q.front();q.pop();
for(int e=h[u];e;e=net[e])
{
int v=go[e];
if(!dep[v]&&cap[e])
{
dep[v]=dep[u]+1;
q.push(v);
}
}
}
return dep[t];
}
int dfs(int u,int flow)
{
if(u==t)return flow;
int res=0,tot=0;
for(int e=h[u];e;e=net[e])
{
int v=go[e];
if(dep[v]==dep[u]+1&&cap[e])
{
res=dfs(v,min(flow,cap[e]));
tot+=res;
cap[e]-=res;
cap[e^1]+=res;
flow-=res;
}
}
if(tot==0)dep[u]=0;
return tot;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("cin.txt","r",stdin);
// freopen("cout.txt","w",stdout);
#endif
n=r;
s='A';t='Z';
char a,b;
for(int i=1,w;i<=n;i++)
{
cin>>a>>b>>w;
add(a,b,w);
}
int ans=0;
while(bfs())
{
ans+=dfs(s,1e9);
}
printf("%d\n",ans);
return 0;
}