#include <bits/stdc++.h>
using namespace std;
struct cube {
  long long c, s, id;
  bool operator<(const cube s1) const {
    return (c < s1.c || (c == s1.c && s > s1.s));
  }
} a[100010];
struct box {
  long long n, st;
  bool operator<(const box s) const { return (n < s.n); }
} b[100010];
long long mx[100010], m_id[100010], n, ret, ax, ay, x_st, y_st;
int main() {
  scanf("%d", &n);
  for (long long i = 0; i < n; i++)
    scanf("%d%d", &a[i].c, &a[i].s), a[i].id = i + 1;
  sort(a, a + n);
  long long idx = 0;
  b[idx].st = 0, b[idx].n = 1;
  for (long long i = 1; i < n; i++) {
    if (a[i].c == a[i - 1].c)
      b[idx].n++;
    else
      b[++idx].n = 1, b[idx].st = i;
  }
  idx++;
  sort(b, b + idx);
  for (long long i = 0; i < idx; i++) {
    long long S = 0;
    for (long long j = 0; j < b[i].n; j++) {
      S += a[b[i].st + j].s;
      for (long long k = j; k <= j + 2; k++) {
        if (ret < S + mx[k] && mx[k]) {
          ret = S + mx[k];
          ax = j + 1, ay = k, x_st = b[i].st, y_st = m_id[k];
        }
      }
    }
    if (S > mx[b[i].n]) mx[b[i].n] = S, m_id[b[i].n] = b[i].st;
  }
  cout << ret << endl;
  cout << ax + ay << endl;
  for (long long i = 0; i < ax; i++) {
    cout << a[x_st + i].id << " ";
    if (i < ay) cout << a[y_st + i].id << " ";
  }
  return 0;
}
