#include <bits/stdc++.h>
using namespace std;
void ASS(bool b) {
  if (!b) {
    ++*(int*)0;
  }
}
#pragma comment(linker, "/STACK:106777216")
const int N = 1 << 17;
const long long inf = 1LL << 61;
vector<pair<int, int> > g[N];
struct S {
  int c, s, id;
};
bool operator<(const S& a, const S& b) {
  return a.c < b.c || a.c == b.c && a.s > b.s;
}
pair<long long, int> MaxSize[N];
long long res = -1;
int g0 = 0;
int g1 = 0;
int s0 = 0;
int s1 = 0;
void Check(long long sum, int i, int j0, int j1) {
  sum += MaxSize[j1].first;
  if (res < sum) {
    res = sum;
    g0 = i;
    s0 = j0;
    g1 = MaxSize[j1].second;
    s1 = j1;
  }
}
int main() {
  int n;
  cin >> n;
  vector<S> inp(n);
  for (int i = 0; i < (int)(n); i++) {
    cin >> inp[i].c >> inp[i].s;
    inp[i].id = i + 1;
  }
  sort(inp.begin(), inp.end());
  int prc = inp[0].c - 1;
  int cols = 0;
  for (int i = 0; i < (int)(n); i++) {
    if (prc != inp[i].c) {
      prc = inp[i].c;
      cols++;
    }
    g[cols - 1].push_back(make_pair(inp[i].s, inp[i].id));
  }
  for (int i = 0; i < (int)(N); i++) MaxSize[i].first = -inf;
  for (int i = 0; i < (int)(cols); i++) {
    long long curSum = 0;
    for (int j = 0; j < (int)(g[i].size()); j++) {
      curSum += g[i][j].first;
      Check(curSum, i, j + 1, j);
      Check(curSum, i, j + 1, j + 1);
      Check(curSum, i, j + 1, j + 2);
    }
    curSum = 0;
    for (int j = 0; j < (int)(g[i].size()); j++) {
      curSum += g[i][j].first;
      if (MaxSize[j + 1].first < curSum) {
        MaxSize[j + 1].first = curSum;
        MaxSize[j + 1].second = i;
      }
    }
  }
  int G[2] = {g0, g1};
  int S[2] = {s0, s1};
  vector<int> v[2];
  for (int z = 0; z < (int)(2); z++) {
    for (int i = 0; i < (int)(S[z]); i++) v[z].push_back(g[G[z]][i].second);
  }
  if (v[0].size() < v[1].size()) swap(v[0], v[1]);
  vector<int> ans;
  for (int i = 0; i < (int)(v[0].size() + v[1].size()); i++)
    ans.push_back(v[i & 1][i >> 1]);
  cout << res << endl;
  cout << ans.size() << endl;
  for (int i = 0; i < (int)(ans.size()); i++) {
    if (i) cout << " ";
    cout << ans[i];
  }
  cout << endl;
  return 0;
}
