#include <bits/stdc++.h>
using namespace std;
map<int, int> se;
struct node {
  int x, y, id;
} s[100005];
typedef struct Node {
  long long sum;
  int index;
};
vector<node> col[100005];
int Color[100005];
Node Height[100005][2];
long long sum[100005];
bool cmp(node a, node b) { return (a.y > b.y); }
void Push(int x, Node A) {
  if (A.sum > Height[x][0].sum) {
    Node B = Height[x][0];
    Height[x][0] = A;
    if (B.sum > Height[x][1].sum) {
      Height[x][1] = B;
    }
  } else if (A.sum > Height[x][1].sum) {
    Height[x][1] = A;
  }
}
int main() {
  int a, b;
  int n, i, j, k;
  while (scanf("%d", &n) != EOF) {
    se.clear();
    int Index = 0;
    Color[0] = -1;
    for (i = 1; i <= n; i++) {
      scanf("%d %d", &s[i].x, &s[i].y);
      s[i].id = i;
      if (se[s[i].x] == 0) {
        se[s[i].x] = ++Index;
        Color[Index] = s[i].x;
        col[Index].clear();
        col[Index].push_back(s[i]);
      } else {
        col[se[s[i].x]].push_back(s[i]);
      }
    }
    for (i = 1; i <= n; i++) {
      Height[i][0].sum = 0;
      Height[i][1].sum = 0;
    }
    for (i = 1; i <= Index; i++) {
      sort(col[i].begin(), col[i].end(), cmp);
      sum[1] = col[i][0].y;
      Node temp;
      temp.sum = sum[1];
      temp.index = i;
      Push(1, temp);
      for (j = 1; j < col[i].size(); j++) {
        sum[j + 1] = sum[j] + col[i][j].y;
        temp.sum = sum[j + 1];
        Push(j + 1, temp);
      }
    }
    long long H = 0;
    int cnt, col1 = 0, col2 = 0;
    Height[n + 1][0].sum = 0;
    for (i = 1; i <= n; i++) {
      if (Height[i][0].sum && Height[i][1].sum) {
        if (H < Height[i][0].sum + Height[i][1].sum) {
          H = Height[i][0].sum + Height[i][1].sum;
          col1 = Height[i][0].index;
          col2 = Height[i][1].index;
          cnt = i + i;
        }
      } else if (Height[i][0].sum) {
        if (i == 1) {
          H = Height[i][0].sum;
          col1 = Height[i][0].index, col2 = -1;
          cnt = i;
        }
      }
      for (j = 0; j < 2; j++) {
        if (!Height[i][j].sum) break;
        for (k = 0; k < 2; k++) {
          if (!Height[i + 1][k].sum) break;
          if (Height[i][j].index != Height[i + 1][k].index) {
            if (H < Height[i][j].sum + Height[i + 1][k].sum) {
              H = Height[i][j].sum + Height[i + 1][k].sum;
              col1 = Height[i][j].index;
              col2 = Height[i + 1][k].index;
              cnt = i + i + 1;
            }
          }
        }
      }
    }
    cout << H << endl;
    printf("%d\n", cnt);
    if (cnt == 1) {
      printf("%d\n", col[col1][0].id);
    } else {
      int x1 = cnt / 2;
      int x2 = cnt - x1;
      int id1 = 0, id2 = 0;
      if (x2 > x1) printf("%d ", col[col2][id2++].id);
      while (x1) {
        printf("%d %d ", col[col1][id1++].id, col[col2][id2++].id);
        x1--;
      }
      puts("");
    }
  }
  return 0;
}
