#include <bits/stdc++.h>
using namespace std;
map<int, vector<pair<long long, int> > > v;
map<int, vector<pair<int, int> > > m;
pair<int, int> a1, b1;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    m[a].push_back(make_pair(b, i));
  }
  vector<pair<int, int> > g;
  long long sum = 0;
  for (map<int, vector<pair<int, int> > >::iterator it = m.begin();
       it != m.end(); it++) {
    g = (*it).second;
    sort(g.begin(), g.end(), greater<pair<int, int> >());
    sort((*it).second.begin(), (*it).second.end(), greater<pair<int, int> >());
    sum = 0;
    for (int i = 0; i < g.size(); i++) {
      sum = (long long)sum + g[i].first;
      v[i + 1].push_back(make_pair(sum, (*it).first));
    }
  }
  for (map<int, vector<pair<long long, int> > >::iterator it = v.begin();
       it != v.end(); it++) {
    sort((*it).second.begin(), (*it).second.end(),
         greater<pair<long long, int> >());
  }
  long long maxx = 0;
  for (int i = 2; i <= n; i++) {
    if (i % 2 == 0) {
      long long u = 0;
      if ((v[i / 2]).size() <= 1) continue;
      u = (long long)v[i / 2][0].first + v[i / 2][1].first;
      if (u > maxx) {
        maxx = u;
        a1 = make_pair(v[i / 2][0].second, i / 2);
        b1 = make_pair(v[i / 2][1].second, i / 2);
      }
    } else {
      if (v[i / 2].size() > 0 && v[i / 2 + 1].size() > 0) {
        long long u = 0;
        int e, o;
        e = 0;
        o = 0;
        if (v[i / 2][0].second == v[i / 2 + 1][0].second) e = 1;
        if (e + 1 <= v[i / 2].size() && o + 1 <= v[i / 2 + 1].size()) {
          u = (long long)v[i / 2][e].first + v[i / 2 + 1][o].first;
          if (u > maxx) {
            maxx = u;
            a1 = make_pair(v[i / 2][e].second, i / 2);
            b1 = make_pair(v[i / 2 + 1][o].second, i / 2 + 1);
          }
        }
        swap(e, o);
        if (e + 1 <= v[i / 2].size() && o + 1 <= v[i / 2 + 1].size()) {
          u = (long long)v[i / 2][e].first + v[i / 2 + 1][o].first;
          if (u > maxx) {
            maxx = u;
            a1 = make_pair(v[i / 2][e].second, i / 2);
            b1 = make_pair(v[i / 2 + 1][o].second, i / 2 + 1);
          }
        }
      }
    }
  }
  cout << endl;
  cout << maxx << endl;
  vector<pair<int, int> > g1, g2;
  cout << a1.second + b1.second << endl;
  int x1 = 0, x2 = 0;
  if (b1.second > a1.second) swap(a1, b1);
  g1 = m[a1.first];
  g2 = m[b1.first];
  for (int i = 0; i < a1.second + b1.second; i++) {
    if (i % 2 == 0) {
      cout << g1[x1].second << endl;
      x1++;
    } else {
      cout << g2[x2].second << endl;
      x2++;
    }
  }
}
