#include <bits/stdc++.h>
using namespace std;
vector<long long> one(100010, -1000000000000000000ll);
vector<int> oneidx(100010);
vector<long long> two(100010, -1000000000000000000ll);
vector<int> twoidx(100010);
int main(int argc, char** argv) {
  int n;
  scanf("%d", &n);
  int a, b;
  map<int, int> color;
  int coloridx = 1;
  long long tmp;
  vector<vector<pair<long long, int> > > inp;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &a, &b);
    if ((tmp = color[a]) == 0) {
      tmp = coloridx;
      color[a] = coloridx++;
      inp.push_back(vector<pair<long long, int> >());
    }
    inp[tmp - 1].push_back(make_pair(b, i + 1));
  }
  coloridx--;
  for (int i = 0; i < coloridx; i++) sort(inp[i].rbegin(), inp[i].rend());
  for (int i = 0; i < coloridx; i++) {
    for (int j = 0; j < ((int)inp[i].size()); j++) {
      if (j - 1 >= 0) inp[i][j].first += inp[i][j - 1].first;
      tmp = inp[i][j].first;
      if (tmp > one[j + 1]) {
        two[j + 1] = one[j + 1];
        twoidx[j + 1] = oneidx[j + 1];
        one[j + 1] = tmp;
        oneidx[j + 1] = i;
      } else {
        if (tmp > two[j + 1]) {
          two[j + 1] = tmp;
          twoidx[j + 1] = i;
        }
      }
    }
  }
  long long ansheight, ansblocks;
  int ansidx1, ansidx2;
  ansheight = -1000000000000000000ll;
  for (int i = 0; i < 100010; i++) {
    tmp = one[i] + two[i];
    if (ansheight < tmp) {
      ansheight = tmp;
      ansblocks = i * 2;
      ansidx1 = oneidx[i];
      ansidx2 = twoidx[i];
    }
    if (i - 1 >= 0) {
      if (oneidx[i] != oneidx[i - 1]) {
        tmp = one[i] + one[i - 1];
        if (ansheight < tmp) {
          ansheight = tmp;
          ansblocks = i * 2 - 1;
          ansidx1 = oneidx[i];
          ansidx2 = oneidx[i - 1];
        }
      }
      if (oneidx[i] != twoidx[i - 1]) {
        tmp = one[i] + two[i - 1];
        if (ansheight < tmp) {
          ansheight = tmp;
          ansblocks = i * 2 - 1;
          ansidx1 = oneidx[i];
          ansidx2 = twoidx[i - 1];
        }
      }
      if (twoidx[i] != oneidx[i - 1]) {
        tmp = two[i] + one[i - 1];
        if (ansheight < tmp) {
          ansheight = tmp;
          ansblocks = i * 2 - 1;
          ansidx1 = twoidx[i];
          ansidx2 = oneidx[i - 1];
        }
      }
      if (twoidx[i] != twoidx[i - 1]) {
        tmp = two[i] + two[i - 1];
        if (ansheight < tmp) {
          ansheight = tmp;
          ansblocks = i * 2 - 1;
          ansidx1 = twoidx[i];
          ansidx2 = twoidx[i - 1];
        }
      }
    }
  }
  cout << ansheight << endl;
  cout << ansblocks << endl;
  if (ansblocks & 1) {
    printf("%d ", inp[ansidx1][ansblocks / 2].second);
    tmp = ansblocks / 2;
    for (int i = 0; i < tmp; i++) {
      printf("%d %d ", inp[ansidx2][i].second, inp[ansidx1][i].second);
    }
  } else {
    tmp = ansblocks / 2;
    for (int i = 0; i < tmp; i++) {
      printf("%d %d ", inp[ansidx2][i].second, inp[ansidx1][i].second);
    }
  }
  puts("");
  return 0;
}
