#include <bits/stdc++.h>
using namespace std;
const int _N = 1e5 + 11;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long k, n;
map<string, priority_queue<long long> > mm;
vector<string> un;
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cout << fixed;
  cout << setprecision(15);
  srand(time(NULL));
  cin >> k >> n;
  for (int i = 0; i < k; i++) {
    string s;
    long long val;
    cin >> s >> val;
    if (mm[s].empty()) {
      un.push_back(s);
      mm[s].push(-INF);
    }
    mm[s].push(val);
  }
  long long res = 0, mn = 0;
  for (int i = 0; i < (int)un.size(); i++) {
    string a = un[i];
    string b = un[i];
    reverse(b.begin(), b.end());
    if (a == b) {
      while ((int)mm[a].size() > 1) {
        long long x = mm[a].top();
        mm[a].pop();
        long long y = mm[a].top();
        mm[a].pop();
        if (x >= 0 && y >= 0) {
          res += x + y;
        } else if (x >= 0) {
          long long t = max(-x, y);
          res += x + t;
          mn = min(mn, t);
        }
      }
    } else {
      while (!mm[a].empty() && !mm[b].empty()) {
        long long x = mm[a].top();
        mm[a].pop();
        long long y = mm[b].top();
        mm[b].pop();
        if (x + y > 0) res += x + y;
      }
    }
  }
  res -= mn;
  cout << res << '\n';
  return 0;
}
