#include <bits/stdc++.h>
using namespace std;
const int maxN = 201000;
struct cube {
  int c, s, num;
} p[maxN];
int n;
long long f1[maxN], f2[maxN], g[maxN];
long long cnt = 0, sum = 0, ans = 0, k1 = 0, k2 = 0;
void init() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &p[i].c, &p[i].s);
    p[i].num = i;
  }
}
bool cmp(cube a, cube b) {
  if ((a.c < b.c) || ((a.c == b.c) && (a.s > b.s))) return true;
  return false;
}
void work() {
  sort(p + 1, p + n + 1, cmp);
  long long tmp = 1000000;
  for (int i = 0; i < maxN; i++) f1[i] = -tmp * tmp;
  memset(f2, 0, sizeof(f2));
  memset(g, 0, sizeof(g));
  p[0].c = -1;
  for (int i = 1; i <= n; i++) {
    if (p[i].c != p[i - 1].c) {
      for (int j = 1; j <= cnt; j++)
        if (f1[j] < f2[j]) {
          f1[j] = f2[j];
          g[j] = p[i - 1].c;
        }
      cnt = 0;
      sum = 0;
    }
    cnt++;
    sum += p[i].s;
    f2[cnt] = sum;
    for (int j = -1; j <= 1; j++)
      if ((ans < sum + f1[cnt + j])) {
        ans = sum + f1[cnt + j];
        k1 = p[i].c;
        k2 = g[cnt + j];
      }
  }
}
void print() {
  cout << ans << '\n';
  long long st1, st2, cnt1 = 0, cnt2 = 0;
  for (int i = 1; i <= n; i++) {
    if ((p[i].c != p[i - 1].c) && (p[i].c == k1)) st1 = i;
    if ((p[i].c != p[i - 1].c) && (p[i].c == k2)) st2 = i;
  }
  for (int i = st1; i <= n; i++)
    if (p[i].c == p[st1].c) cnt1++;
  for (int i = st2; i <= n; i++)
    if (p[i].c == p[st2].c) cnt2++;
  cnt = cnt1 * 2 + 1;
  if (cnt > cnt2 * 2 + 1) cnt = cnt2 * 2 + 1;
  if (cnt > cnt1 + cnt2) cnt = cnt1 + cnt2;
  cout << cnt << '\n';
  if (cnt1 < cnt2) {
    swap(cnt1, cnt2);
    swap(st1, st2);
  }
  long long now = 0;
  while (now < cnt) {
    printf("%d ", p[st1++].num);
    now++;
    if (now == cnt) break;
    printf("%d ", p[st2++].num);
    now++;
  }
  printf("\n");
}
int main() {
  init();
  work();
  print();
  return 0;
}
