#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
struct box {
  int col;
  int size;
  int idx;
};
inline bool operator<(const box& b1, const box& b2) {
  if (b1.col != b2.col) return b1.col < b2.col;
  return b1.size > b2.size;
}
vector<vector<box> > a;
box b[100005];
int n;
long long mx[100005];
int mxc[100005];
inline bool cmp(const int& c1, const int& c2) {
  return a[c1].size() > a[c2].size();
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < (int)(n); i++) {
    scanf("%d %d", &b[i].col, &b[i].size);
    b[i].idx = i;
  }
  sort(b, b + n);
  int l = 0;
  while (l < n) {
    int r = l;
    vector<box> na;
    while (r < n && b[l].col == b[r].col) {
      na.push_back(b[r++]);
    }
    l = r;
    a.push_back(na);
  }
  int cnt = a.size();
  vector<int> p(cnt);
  for (int i = 0; i < (int)(cnt); i++) p[i] = i;
  sort(p.begin(), p.end(), cmp);
  long long best = -1;
  int c1 = -1, c2 = -1;
  int take1 = 0, take2 = 0;
  for (int i = 0; i < (int)(n + 1); i++) mx[i] = -1;
  for (int i = 0; i < (int)(cnt); i++) {
    int col = p[i];
    long long sum = 0;
    for (int j = 0; j < (int)(a[col].size()); j++) {
      sum += a[col][j].size;
      for (int k = j; k <= j + 2; k++) {
        if (mx[k] != -1ll && sum + mx[k] > best) {
          best = sum + mx[k];
          c1 = col;
          c2 = mxc[k];
          take1 = j + 1;
          take2 = k;
        }
      }
    }
    sum = 0;
    for (int j = 0; j < (int)(a[col].size()); j++) {
      sum += a[col][j].size;
      if (mx[j + 1] < sum) {
        mx[j + 1] = sum;
        mxc[j + 1] = col;
      }
    }
  }
  if (take1 < take2) {
    swap(c1, c2);
    swap(take1, take2);
  }
  cout << best << endl;
  cout << take1 + take2 << endl;
  for (int i = 0; i < (int)(take2); i++) {
    printf("%d %d ", a[c1][i].idx + 1, a[c2][i].idx + 1);
  }
  if (take1 > take2) {
    printf("%d ", a[c1][take2].idx + 1);
  }
  printf("\n");
  return 0;
}
