#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
map<int, vector<pair<int, int> > > m;
set<pair<long long, int> > best[N];
int n, c, s;
long long best_stack;
int glob_a_part, glob_b_part, glob_a_col, glob_b_col;
void try_it(int a_part, int i, int b_part, int j) {
  if (best[a_part].size() >= (i + 1) && best[b_part].size() >= (j + 1)) {
    set<pair<long long, int> >::reverse_iterator q1 = best[a_part].rbegin(),
                                                 q2 = best[b_part].rbegin();
    if (i) q1++;
    if (j) q2++;
    int col_a = q1->second, col_b = q2->second;
    if (col_a == col_b) {
      if (!i) try_it(a_part, i + 1, b_part, j);
      if (!j) try_it(a_part, i, b_part, j + 1);
    } else {
      long long total_height = q1->first + q2->first;
      if (total_height > best_stack) {
        best_stack = total_height;
        glob_a_part = a_part;
        glob_b_part = b_part;
        glob_a_col = col_a;
        glob_b_col = col_b;
      }
    }
  }
}
int main() {
  best_stack = 0;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> c >> s;
    m[c].push_back(make_pair(-s, i + 1));
  }
  for (map<int, vector<pair<int, int> > >::iterator q = m.begin(); q != m.end();
       q++) {
    sort(q->second.begin(), q->second.end());
    vector<pair<int, int> > v = q->second;
    long long sum = 0;
    for (int i = 0; i < v.size(); i++) {
      sum += -v[i].first;
      best[i + 1].insert(make_pair(sum, q->first));
    }
  }
  for (int i = 2; i <= n; i++) {
    int a_part = i / 2, b_part = i / 2 + (i % 2);
    try_it(a_part, 0, b_part, 0);
  }
  cout << best_stack << endl << glob_a_part + glob_b_part << endl;
  for (int i = 0; i < glob_a_part + glob_b_part; i++) {
    if (glob_a_part > glob_b_part != (i % 2))
      cout << m[glob_a_col][i / 2].second;
    else
      cout << m[glob_b_col][i / 2].second;
    if (i + 1 != glob_a_part + glob_b_part) cout << " ";
  }
}
