#include <bits/stdc++.h>
using namespace std;
map<int, int> trans;
int num, n, sum[int(1e5 + 5)], len;
vector<pair<int, int> > dif[int(1e5 + 5)];
long long ans, res1[int(1e5 + 5)], res2[int(1e5 + 5)], ind1[int(1e5 + 5)],
    ind2[int(1e5 + 5)], part1, part2, len1, len2;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    int c, s;
    cin >> c >> s;
    if (!trans.count(c)) trans[c] = ++num;
    int ind = trans[c];
    dif[ind].push_back(make_pair(s, i + 1));
  }
  for (int i = 1; i <= num; i++) {
    sort(dif[i].begin(), dif[i].end());
    reverse(dif[i].begin(), dif[i].end());
  }
  for (int i = 1; i <= num; i++) {
    long long sum = 0;
    len = max(len, int((dif[i]).size()));
    for (int j = 0; j < int((dif[i]).size()); j++) {
      sum += dif[i][j].first;
      if (sum > res2[j + 1]) {
        res2[j + 1] = sum;
        ind2[j + 1] = i;
        if (sum > res1[j + 1]) {
          swap(res1[j + 1], res2[j + 1]);
          swap(ind1[j + 1], ind2[j + 1]);
        }
      }
    }
  }
  for (int i = 1; i <= len; i++) {
    if (ind2[i]) {
      if (res1[i] + res2[i] > ans) {
        ans = res1[i] + res2[i];
        part1 = ind1[i], part2 = ind2[i];
        len1 = len2 = i;
      }
    }
    if (i == 1) continue;
    if (ind1[i] != ind1[i - 1]) {
      if (res1[i] + res1[i - 1] > ans) {
        ans = res1[i] + res1[i - 1];
        part1 = ind1[i], part2 = ind1[i - 1];
        len1 = i, len2 = i - 1;
      }
    } else {
      if (res1[i] + res2[i - 1] > ans && ind2[i - 1]) {
        ans = res1[i] + res2[i - 1];
        part1 = ind1[i], part2 = ind2[i - 1];
        len1 = i, len2 = i - 1;
      } else if (ind1[i - 1] && ind2[i] && res2[i] + res1[i - 1] > ans) {
        ans = res2[i] + res1[i - 1];
        part1 = ind2[i], part2 = ind1[i - 1];
        len1 = i, len2 = i - 1;
      }
    }
  }
  cout << ans << endl;
  cout << len1 + len2 << endl;
  for (int i = 0; i < len1; i++) {
    cout << dif[part1][i].second << " ";
    if (i < len2) {
      cout << dif[part2][i].second << " ";
    }
  }
  return 0;
}
