#include <bits/stdc++.h>
using namespace std;
long long int n, lazy[400005];
pair<long long int, long long int> op[100005];
map<long long int, long long int> m;
struct node {
  long long int b[5] = {0};
  long long int cnt = 0;
};
node tree[400005];
void lazify(long long int i, long long int s, long long int e) {
  if (lazy[i]) {
    long long int a[5];
    for (int j = 0; j < 5; j++) a[j] = tree[i].b[j];
    for (int j = 0; j < 5; j++) tree[i].b[(j + lazy[i]) % 5] = a[j];
    if (s != e) {
      lazy[2 * i] = (lazy[2 * i] + lazy[i]) % 5;
      lazy[2 * i + 1] = (lazy[2 * i + 1] + lazy[i]) % 5;
    }
    lazy[i] = 0;
  }
}
pair<long long int, long long int> query(long long int l, long long int r,
                                         long long int s, long long int e,
                                         long long int i) {
  if (s > r || e < l || l > r) return make_pair(0, 0);
  lazify(i, s, e);
  if (s >= l && e <= r) return make_pair(tree[i].b[3], tree[i].cnt);
  long long int mid = (s + e) >> 1;
  pair<long long int, long long int> a = query(l, r, s, mid, 2 * i);
  pair<long long int, long long int> b = query(l, r, mid + 1, e, 2 * i + 1);
  return make_pair(a.first + b.first, a.second + b.second);
}
void upd(long long int l, long long int s, long long int e, long long int i,
         long long int v, long long int j) {
  lazify(i, s, e);
  if (s > l || e < l) return;
  if (s == e) {
    tree[i].b[j] += l * v;
    tree[i].cnt += v;
    return;
  }
  long long int mid = (s + e) >> 1;
  if (s <= l && mid >= l) lazy[2 * i + 1] = (lazy[2 * i + 1] + v + 5) % 5;
  upd(l, s, mid, 2 * i, v, j);
  upd(l, mid + 1, e, 2 * i + 1, v, j);
  for (int h = 0; h < 5; h++)
    tree[i].b[h] = tree[2 * i].b[h] + tree[2 * i + 1].b[h];
  tree[i].cnt = tree[2 * i].cnt + tree[2 * i + 1].cnt;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  string s;
  for (int i = 1; i <= n; i++) {
    cin >> s;
    if (s[0] == 'a') op[i].first = 1, cin >> op[i].second, m[op[i].second] = 1;
    if (s[0] == 'd') op[i].first = 2, cin >> op[i].second, m[op[i].second] = 1;
    if (s[0] == 's') op[i].first = 3;
  }
  long long int ind = 1;
  for (auto j : m) m[j.first] = ind++;
  ind--;
  for (int i = 1; i <= n; i++) {
    long long int x = m[op[i].second];
    if (op[i].first == 1) {
      pair<long long int, long long int> y = query(1, x - 1, 1, ind, 1);
      upd(x, 1, ind, 1, 1, (y.second + 1) % 5);
    } else if (op[i].first == 2) {
      pair<long long int, long long int> y = query(1, x - 1, 1, ind, 1);
      upd(x, 1, ind, 1, -1, (y.second + 1) % 5);
    } else
      cout << (tree[1].b[3]) << endl;
  }
  return 0;
}
