#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > f[200000];
pair<long long, long long> maxi[200000], maxi2[200000];
pair<pair<long long, long long>, long long> a[200000];
int main() {
  long long n;
  cin >> n;
  set<long long> st;
  map<long long, long long> mp;
  for (long long i = 0; i < n; i++) {
    long long q, w;
    cin >> w >> q;
    a[i] = make_pair(make_pair(q, w), i + 1);
    st.insert(w);
  }
  long long cur = 1;
  for (set<long long>::iterator it = st.begin(); it != st.end(); it++)
    mp[(*it)] = cur++;
  for (long long i = 0; i < n; i++) a[i].first.second = mp[a[i].first.second];
  for (long long i = 0; i < n; i++)
    f[a[i].first.second].push_back(make_pair(a[i].first.first, a[i].second));
  for (long long i = 1; i < 150000; i++) {
    sort(f[i].begin(), f[i].end());
    reverse(f[i].begin(), f[i].end());
  }
  long long ans = 0;
  for (long long i = 1; i < 150000; i++) {
    long long s = 0;
    for (long long j = 0; j < f[i].size(); j++) {
      s += f[i][j].first;
      if (s >= maxi[j + 1].first) {
        maxi2[j + 1] = maxi[j + 1];
        maxi[j + 1] = make_pair(s, i);
      } else if (s > maxi2[j + 1].first)
        maxi2[j + 1] = make_pair(s, i);
    }
  }
  for (long long i = 1; i < 140000; i++) {
    if (maxi[i].first == 0) continue;
    long long s = maxi[i].first;
    if (maxi2[i].first != 0) ans = max(ans, s + maxi2[i].first);
    long long cur;
    if (maxi[i].second == maxi[i + 1].second)
      cur = s + maxi2[i + 1].first;
    else
      cur = s + maxi[i + 1].first;
    if (cur != s) ans = max(ans, cur);
    if (i == 1) continue;
    if (maxi[i].second == maxi[i - 1].second)
      cur = s + maxi2[i - 1].first;
    else
      cur = s + maxi[i - 1].first;
    if (cur != s) ans = max(ans, cur);
  }
  vector<long long> anso;
  for (long long i = 1; i < 140000; i++) {
    if (maxi[i].first == 0) continue;
    long long s = maxi[i].first;
    if (s + maxi2[i].first == ans) {
      for (long long j = 0; j < i; j++) {
        anso.push_back(f[maxi[i].second][j].second);
        anso.push_back(f[maxi2[i].second][j].second);
      }
      break;
    }
    long long cur;
    if (maxi[i].second == maxi[i + 1].second)
      cur = s + maxi2[i + 1].first;
    else
      cur = s + maxi[i + 1].first;
    if (cur != s && cur == ans) {
      for (long long j = 0; j < i; j++) {
        if (maxi[i].second == maxi[i + 1].second)
          anso.push_back(f[maxi2[i + 1].second][j].second);
        else
          anso.push_back(f[maxi[i + 1].second][j].second);
        anso.push_back(f[maxi[i].second][j].second);
      }
      if (maxi[i].second == maxi[i + 1].second)
        anso.push_back(f[maxi2[i + 1].second][i].second);
      else
        anso.push_back(f[maxi[i + 1].second][i].second);
      break;
    }
    if (i == 1) continue;
    if (maxi[i].second == maxi[i - 1].second)
      cur = s + maxi2[i - 1].first;
    else
      cur = s + maxi[i - 1].first;
    if (cur != s && cur == ans) {
      for (long long j = 0; j < i - 1; j++) {
        anso.push_back(f[maxi[i].second][j].second);
        if (maxi[i].second == maxi[i - 1].second)
          anso.push_back(f[maxi2[i - 1].second][j].second);
        else
          anso.push_back(f[maxi[i - 1].second][j].second);
      }
      anso.push_back(f[maxi[i].second][i - 1].second);
      break;
    }
  }
  cout << ans << endl << anso.size() << endl;
  for (long long i = 0; i < anso.size(); i++) cout << anso[i] << " ";
  return 0;
}
