#include <bits/stdc++.h>
using namespace std;
template <class T>
int len(const T &c) {
  return (int)c.size();
}
template <class T>
void cmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
void cmax(T &a, T b) {
  if (b > a) a = b;
}
int n, t, l, t1, t2, t3, t11, t33;
long long tl1, tl2, tl3, mx = -1;
map<int, int> M;
vector<pair<vector<pair<int, int> >, long long> > v(100010);
vector<pair<int, long long> > last(100010);
long long sum(int node, int sz) {
  long long ret = 0;
  for (int i(0), _n(sz); i < _n; ++i) {
    ret += v[node].first[i].first;
  }
  return ret;
}
bool comp(pair<vector<pair<int, int> >, long long> o1,
          pair<vector<pair<int, int> >, long long> o2) {
  return o1.second > o2.second;
}
bool comp2(pair<int, int> o1, pair<int, int> o2) { return o1.first > o2.first; }
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i(0), _n(n); i < _n; ++i) {
    cin >> t >> l;
    t1 = M[t];
    if (!t1) {
      M[t] = t1 = ++t2;
    }
    v[t1 - 1].first.push_back(make_pair(l, i + 1));
    v[t1 - 1].second += l;
  }
  sort(v.begin(), v.begin() + t2, comp);
  for (int i(0), _n(t2); i < _n; ++i) {
    sort(v[i].first.begin(), v[i].first.end(), comp2);
  }
  tl1 = 0;
  for (int i(0), _n(len(v[0].first)); i < _n; ++i) {
    tl1 += v[0].first[i].first;
    last[i].second = tl1;
    last[i].first = 0;
  }
  for (int i(1), _b(t2); i < _b; ++i) {
    tl1 = 0;
    for (int j(0), _n(len(v[i].first)); j < _n; ++j) {
      tl1 += v[i].first[j].first;
      tl2 = last[j].second;
      t11 = i;
      t33 = last[j].first;
      if (j > 0) {
        if (tl2 < last[j - 1].second) {
          tl2 = last[j - 1].second;
          t11 = last[j - 1].first;
          t33 = i;
        }
      }
      if (tl2 < last[j + 1].second) {
        tl2 = last[j + 1].second;
        t11 = i;
        t33 = last[j + 1].first;
      }
      if (tl2 == 0) continue;
      if (tl1 + tl2 > mx) {
        mx = tl1 + tl2;
        t1 = t11;
        t3 = t33;
      }
    }
    tl1 = 0;
    for (int j(0), _n(len(v[i].first)); j < _n; ++j) {
      tl1 += v[i].first[j].first;
      if (last[j].second < tl1) {
        last[j].second = tl1;
        last[j].first = i;
      }
    }
  }
  cout << mx << endl;
  if (len(v[t1].first) != len(v[t3].first))
    cout << len(v[t1].first) * 2 + 1 << endl;
  else
    cout << len(v[t1].first) * 2 << endl;
  for (int i(0), _n(len(v[t1].first)); i < _n; ++i) {
    cout << v[t3].first[i].second << " " << v[t1].first[i].second << " ";
  }
  if (len(v[t1].first) != len(v[t3].first))
    cout << v[t3].first[len(v[t1].first)].second;
}
