#include <bits/stdc++.h>
using namespace std;
void swap(int &a, int &b) {
  int temp = a;
  a = b;
  b = temp;
}
void solve() {
  int n;
  cin >> n;
  unordered_map<string, int> umap;
  umap["ABC"] = INT_MAX;
  umap["A"] = INT_MAX;
  umap["B"] = INT_MAX;
  umap["C"] = INT_MAX;
  umap["AB"] = INT_MAX;
  umap["BC"] = INT_MAX;
  umap["AC"] = INT_MAX;
  for (int i = 1; i <= n; ++i) {
    int value;
    cin >> value;
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    umap[s] = min(umap[s], value);
  }
  int m = INT_MAX;
  m = min(m, umap["ABC"]);
  if (umap["A"] != INT_MAX && umap["B"] != INT_MAX && umap["C"] != INT_MAX)
    m = min(m, umap["A"] + umap["B"] + umap["C"]);
  if (umap["A"] != INT_MAX && umap["BC"] != INT_MAX)
    m = min(m, umap["A"] + umap["BC"]);
  if (umap["B"] != INT_MAX && umap["AC"] != INT_MAX)
    m = min(m, umap["B"] + umap["AC"]);
  if (umap["C"] != INT_MAX && umap["AB"] != INT_MAX)
    m = min(m, umap["C"] + umap["AB"]);
  if (umap["BC"] != INT_MAX && umap["AC"] != INT_MAX)
    m = min(m, umap["BC"] + umap["AC"]);
  if (umap["AB"] != INT_MAX && umap["BC"] != INT_MAX)
    m = min(m, umap["AB"] + umap["BC"]);
  if (umap["AC"] != INT_MAX && umap["AB"] != INT_MAX)
    m = min(m, umap["AC"] + umap["AB"]);
  if (m == INT_MAX)
    cout << -1 << "\n";
  else
    cout << m << "\n";
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
