#include <bits/stdc++.h>
using namespace std;
long long col[100002];
long long siz[100002];
long long sum[100002];
long long bsz[100002][2];
long long bcl[100002][2];
map<long long, vector<pair<long long, long long>>> m;
long long n;
int main() {
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> col[i] >> siz[i];
    m[col[i]].push_back(make_pair(siz[i], i + 1));
  }
  for (map<long long, vector<pair<long long, long long>>>::iterator it =
           m.begin();
       it != m.end(); it++) {
    sort(it->second.rbegin(), it->second.rend());
    long long l = it->second.size();
    long long sum = 0;
    for (long long i = 0; i < l; i++) {
      sum += it->second[i].first;
      if (sum > bsz[i][0]) {
        bsz[i][1] = bsz[i][0];
        bcl[i][1] = bcl[i][0];
        bsz[i][0] = sum;
        bcl[i][0] = it->first;
      } else if (sum > bsz[i][1]) {
        bsz[i][1] = sum;
        bcl[i][1] = it->first;
      }
    }
  }
  long long maxSum = 0;
  long long l = 0;
  long long index = 0;
  long long state = 0;
  for (long long i = 0; i < n; i++) {
    if (bcl[i][0] != bcl[i + 1][0]) {
      if (i != n - 1 && bsz[i + 1][0] && bsz[i][0] &&
          bsz[i][0] + bsz[i + 1][0] > maxSum) {
        index = i;
        state = 1;
        maxSum = bsz[i][0] + bsz[i + 1][0];
        l = 2 * i + 3;
      }
    } else {
      if (i != n - 1 && bsz[i + 1][0] && bsz[i][1] &&
          bsz[i][1] + bsz[i + 1][0] > maxSum) {
        index = i;
        state = 2;
        maxSum = bsz[i][1] + bsz[i + 1][0];
        l = 2 * i + 3;
      }
      if (i != n - 1 && bsz[i + 1][1] && bsz[i][0] &&
          bsz[i][0] + bsz[i + 1][1] > maxSum) {
        index = i;
        state = 3;
        maxSum = bsz[i][0] + bsz[i + 1][1];
        l = 2 * i + 3;
      }
    }
    if (bsz[i][0] && bsz[i][1] && bsz[i][0] + bsz[i][1] > maxSum) {
      index = i;
      state = 0;
      maxSum = bsz[i][0] + bsz[i][1];
      l = 2 * i + 2;
    }
  }
  cout << maxSum << '\n';
  cout << l << '\n';
  for (long long i = 0; i < l; i++) {
    switch (state) {
      case 0:
        cout << m[bcl[index][i % 2]][i / 2].second << ' ';
        break;
      case 1:
        cout << m[bcl[index + (1 - i % 2)][0]][i / 2].second << ' ';
        break;
      case 2:
        cout << m[bcl[index + (1 - i % 2)][i % 2]][i / 2].second << ' ';
        break;
      case 3:
        cout << m[bcl[index + (1 - i % 2)][1 - i % 2]][i / 2].second << ' ';
        break;
      default:
        cout << "fuck you\n";
        break;
    }
  }
  cout << '\n';
}
