http://codeforces.com/contest/1042/problem/B
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll in()
{
ll res=0,p=1;
char c=getchar();
while(c<'0'||c>'9') {if(c=='-') p=-1; c=getchar();}
while(c>='0'&&c<='9') res=res*10+c-48,c=getchar();
return p*res;
}
void out(ll x)
{
if (x>9) out(x/10);
putchar(x%10+48);
}
const int maxn = 5e4 + 5;
const int mod = 7;
int a[8];
char s[10];
int main()
{
memset(a, 0x3f, sizeof(a)); a[0] = 0;
int n;
n = in();
while (n--){
int v;
v = in();
scanf("%s", s + 1);
int ls = strlen(s + 1), w = 0;
//状压,w的二进制表示的低位到高位依次为ABC
for (int i = 1;i <= ls; ++i) w |= (1 << (s[i] - 'A'));
//当w = 7时w的二进制为111,代表ABC都有了,然后就需要思维了
//i枚举所有状态,i | w表示当前枚举的状态加上选择这个东西之后的状态
//更新i | w这个状态的最小值,a[i] + v表示选择这件物品
for (int i = 0; i < 8; ++i) a[i | w] = min(a[i | w], a[i] + v);
}
if (a[7] > 1e9) puts("-1");
else out(a[7]);
return 0;
}