#include <bits/stdc++.h>
using namespace std;
int main() {
  map<int, long long> height;
  map<int, int> num;
  map<int, vector<pair<int, int> > > cubes_by_col;
  int n;
  cin >> n;
  vector<vector<pair<long long, int> > > mx(n + 2,
                                            vector<pair<long long, int> >(2));
  vector<pair<int, int> > cubes(n);
  for (int i = 0; i < n; ++i) {
    cin >> cubes[i].second >> cubes[i].first;
    cubes_by_col[cubes[i].second].push_back(make_pair(cubes[i].first, i + 1));
  }
  sort(cubes.begin(), cubes.end());
  reverse(cubes.begin(), cubes.end());
  for (int i = 0; i < n; ++i) {
    ++num[cubes[i].second];
    int nm = num[cubes[i].second];
    height[cubes[i].second] += cubes[i].first;
    pair<long long, int> cur =
        make_pair(height[cubes[i].second], cubes[i].second);
    if (mx[nm][1] < cur) {
      mx[nm][1] = cur;
      if (mx[nm][0] < mx[nm][1]) {
        swap(mx[nm][0], mx[nm][1]);
      }
    }
  }
  long long ans = 0;
  long long c1 = -1, c2 = -1;
  for (int i = 0; i < n + 1; ++i) {
    if (mx[i][1].first != 0) {
      if (mx[i][0].first + mx[i][1].first > ans) {
        ans = mx[i][0].first + mx[i][1].first;
        c1 = mx[i][0].second;
        c2 = mx[i][1].second;
      }
    }
    for (int a = 0; a < 2; ++a) {
      for (int b = 0; b < 2; ++b) {
        if (mx[i][a].first != 0 && mx[i + 1][b].first != 0 &&
            mx[i][a].second != mx[i + 1][b].second) {
          if (mx[i][a].first + mx[i + 1][b].first > ans) {
            ans = mx[i][a].first + mx[i + 1][b].first;
            c1 = mx[i][a].second;
            c2 = mx[i + 1][b].second;
          }
        }
      }
    }
  }
  vector<pair<int, int> > v1 = cubes_by_col[c1];
  vector<pair<int, int> > v2 = cubes_by_col[c2];
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());
  reverse(v1.begin(), v1.end());
  reverse(v2.begin(), v2.end());
  v2.resize(min(v2.size(), v1.size() + 1));
  cout << ans << endl;
  cout << v1.size() + v2.size() << endl;
  for (int i = 0; i < v1.size(); ++i) {
    cout << v2[i].second << " " << v1[i].second << " ";
  }
  if (v2.size() > v1.size()) {
    cout << v2.back().second;
  }
  cout << endl;
  return 0;
}
