#include <bits/stdc++.h>
using namespace std;
template <typename T, size_t N>
struct array {
  T val[N];
  T& operator[](size_t n) {
    if (n >= N) assert(false);
    return val[n];
  }
  T* begin() { return &val[0]; }
  T* end() { return &val[0] + N; }
};
template <typename A, typename B>
ostream& operator<<(ostream& os, const pair<A, B>& p) {
  return os << '(' << p.first << ", " << p.second << ')';
}
const int inf = 0x3f3f3f3f;
const long long inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const int maxn = 100500;
map<int, vector<pair<int, int>>> cs;
pair<long long, int> besth[maxn][3];
long long res = 0;
int rescs[2];
void go(const pair<long long, int>& a, const pair<long long, int>& b) {
  if (a.second != b.second && b.second != 0 && a.second != 0) {
    long long cur = a.first + b.first;
    if (cur > res) {
      res = cur;
      rescs[0] = a.second;
      rescs[1] = b.second;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int c, s;
    cin >> c >> s;
    cs[c].push_back(pair<int, int>(s, i));
  }
  for (auto it = cs.begin(); it != cs.end(); ++it) {
    const pair<int, vector<pair<int, int>>>& c = *it;
    vector<pair<int, int>>& v = it->second;
    sort((v).begin(), (v).end(), greater<pair<int, int>>());
    long long curh = 0;
    for (int i = 0; i < (int((v).size())); i++) {
      curh += v[i].first;
      besth[i][2] = make_pair(curh, c.first);
      sort(besth[i] + 0, besth[i] + 3);
      reverse(besth[i] + 0, besth[i] + 3);
    }
  }
  for (int i = 0; i < maxn; i++) {
    go(besth[i][0], besth[i][1]);
    if (i) {
      for (int j = 0; j < 2; j++)
        for (int k = 0; k < 2; k++) go(besth[i][j], besth[i - 1][k]);
    }
  }
  vector<int> vres;
  vector<pair<int, int>>& ansa = cs[rescs[0]];
  vector<pair<int, int>>& ansb = cs[rescs[1]];
  for (int i = 0; i < (int((ansb).size())); i++) {
    vres.push_back(ansa[i].second);
    vres.push_back(ansb[i].second);
  }
  if ((int((ansa).size())) != (int((ansb).size())))
    vres.push_back(ansa[(int((ansb).size()))].second);
  cout << res << endl;
  cout << (int((vres).size())) << endl;
  for (int i : vres) cout << i + 1 << ' ';
  cout << endl;
  return 0;
}
