#include <bits/stdc++.h>
using namespace std;
typedef struct triplet {
  long long int first;
  long long int second;
  long long int third;
} triplet;
bool customSort(triplet const& lhs, triplet const& rhs) {
  if (lhs.first == rhs.first) {
    return lhs.second > rhs.second;
  }
  return lhs.first > rhs.first;
}
int n;
vector<triplet> entries;
vector<pair<long long int, long long int> > guys[100100];
pair<long long int, long long int> biggest[100100][2];
vector<pair<long long int, long long int> > sortedArray[100100];
long long int chosen[2];
int main() {
  memset(biggest, 0, sizeof(biggest));
  cin >> n;
  for (int i = 0; i < n; i++) {
    long long int size, color;
    cin >> color >> size;
    triplet newt;
    newt.first = color;
    newt.second = size;
    newt.third = i;
    entries.push_back(newt);
  }
  sort(entries.begin(), entries.end(), &customSort);
  int diff = 0;
  guys[diff].push_back(
      pair<long long int, long long int>(entries[0].second, entries[0].third));
  int size = entries.size();
  for (int i = 1; i < size; i++) {
    if (entries[i - 1].first != entries[i].first) {
      diff++;
    }
    guys[diff].push_back(pair<long long int, long long int>(entries[i].second,
                                                            entries[i].third));
  }
  for (int i = 0; i <= diff; i++) {
    int s = guys[i].size();
    for (int j = 1; j < s; j++) {
      guys[i][j].first += guys[i][j - 1].first;
    }
  }
  long long int maxSize = 0;
  for (int i = 0; i <= diff; i++) {
    long long int s = guys[i].size();
    if (maxSize < s) maxSize = s;
    for (int j = 0; j < s; j++) {
      sortedArray[j].push_back(
          pair<long long int, long long int>(guys[i][j].first, i));
    }
  }
  for (int i = 0; i < maxSize; i++) {
    sort(sortedArray[i].rbegin(), sortedArray[i].rend());
  }
  long long int max = 0;
  for (int i = 0; i < maxSize; i++) {
    if (sortedArray[i].size() >= 2) {
      if (max < sortedArray[i][0].first + sortedArray[i][1].first) {
        max = sortedArray[i][0].first + sortedArray[i][1].first;
        chosen[0] = sortedArray[i][0].second;
        chosen[1] = sortedArray[i][1].second;
      }
    }
    if (i < maxSize - 1) {
      if (sortedArray[i][0].second != sortedArray[i + 1][0].second) {
        if (max < sortedArray[i][0].first + sortedArray[i + 1][0].first) {
          max = sortedArray[i][0].first + sortedArray[i + 1][0].first;
          chosen[1] = sortedArray[i][0].second;
          chosen[0] = sortedArray[i + 1][0].second;
        }
      }
      if (sortedArray[i].size() >= 2 &&
          sortedArray[i][1].second != sortedArray[i + 1][0].second) {
        if (max < sortedArray[i][1].first + sortedArray[i + 1][0].first) {
          max = sortedArray[i][1].first + sortedArray[i + 1][0].first;
          chosen[1] = sortedArray[i][1].second;
          chosen[0] = sortedArray[i + 1][0].second;
        }
      }
    }
  }
  cout << max << endl;
  long long int siz1 = guys[chosen[0]].size();
  long long int siz2 = guys[chosen[1]].size();
  for (int i = siz1 - 1; i > 0; i--) {
    guys[chosen[0]][i].first =
        guys[chosen[0]][i].first - guys[chosen[0]][i - 1].first;
  }
  for (int i = siz2 - 1; i > 0; i--) {
    guys[chosen[1]][i].first =
        guys[chosen[1]][i].first - guys[chosen[1]][i - 1].first;
  }
  long long int res = 0, nGuys = 0;
  for (int i = 0; i < siz1; i++) {
    nGuys++;
    res = guys[chosen[0]][i].first + res;
    if (res == max) {
      break;
    }
    nGuys++;
    res = guys[chosen[1]][i].first + res;
    if (res == max) {
      break;
    }
  }
  cout << nGuys << endl;
  res = 0;
  for (int i = 0; i < siz1; i++) {
    res = guys[chosen[0]][i].first + res;
    if (res == max) {
      cout << guys[chosen[0]][i].second + 1;
      break;
    }
    cout << guys[chosen[0]][i].second + 1 << " ";
    res = guys[chosen[1]][i].first + res;
    if (res == max) {
      cout << guys[chosen[1]][i].second + 1;
      break;
    }
    cout << guys[chosen[1]][i].second + 1 << " ";
  }
  cout << endl;
  return 0;
}
