#include <bits/stdc++.h>
using namespace std;
bool cmp(const vector<pair<int, int> > &lhs,
         const vector<pair<int, int> > &rhs) {
  return lhs.size() < rhs.size();
}
long long int totals[100010];
int curridx[100010];
int main() {
  int N;
  scanf("%d", &N);
  map<int, vector<pair<int, int> > > m;
  for (int i = 0; i < N; i++) {
    int c, s;
    scanf("%d %d", &c, &s);
    m[c].push_back(make_pair(s, i));
  }
  vector<vector<pair<int, int> > > v;
  for (auto p : m) v.push_back(p.second);
  sort(v.begin(), v.end(), cmp);
  for (int i = 0; i < v.size(); i++) sort(v[i].rbegin(), v[i].rend());
  set<pair<long long int, int> > s;
  int st = 0;
  long long int maxtot = 0;
  pair<int, int> l1, l2;
  while (st < v.size()) {
    for (int i = st; i < v.size(); i++) {
      s.erase(make_pair(totals[i], i));
      while (curridx[i] < min(v[i].size(), v[st].size() + 1)) {
        totals[i] += v[i][curridx[i]].first;
        curridx[i] += 1;
      }
      s.insert(make_pair(totals[i], i));
    }
    if (s.size() >= 2) {
      long long int tot = 0;
      auto it = --s.end();
      tot += it->first;
      pair<int, int> p1 = make_pair(it->second, curridx[it->second]);
      it--;
      tot += it->first;
      pair<int, int> p2 = make_pair(it->second, curridx[it->second]);
      if (tot > maxtot) {
        l1 = p1;
        l2 = p2;
        maxtot = tot;
      }
    }
    s.erase(make_pair(totals[st], st));
    st++;
    while (st < v.size() && v[st].size() == v[st - 1].size()) {
      s.erase(make_pair(totals[st], st));
      st++;
    }
  }
  cout << maxtot << endl;
  vector<int> a1, a2;
  for (int i = 0; i < l1.second; i++) a1.push_back(v[l1.first][i].second);
  for (int i = 0; i < l2.second; i++) a2.push_back(v[l2.first][i].second);
  if (a1.size() > a2.size()) swap(a1, a2);
  cout << a1.size() + a2.size() << endl;
  for (int i = 0; i < a1.size(); i++)
    cout << a2[i] + 1 << " " << a1[i] + 1 << " ";
  if (a2.size() > a1.size())
    cout << a2.back() + 1 << endl;
  else
    cout << endl;
  return 0;
}
