program konteineriai;
  { 79 u‘davinys }
  type konteineris = record
                       data : 1..maxint; { realizavimo data }
                       pel : 1..maxint; { pelnas, gaunamas jŤ realizavus }
                       nr : 1..1000;    { numeriai }
                     end;
       baze = array [1..1000] of konteineris;
       eile = array [1..1000] of 0..1000; { konteineri— realizavimo tvarka }
{-----------------------------------------------------------------------}

procedure rikiuoti (n : integer; var kont : baze);
  { surikiuoja konteinerius pelno ma‘‚jimo tvarka }
  { konteineri— nedaug, vartojame nesud‚ting… rikiavimo algoritm… }
  var i, j, max : integer;
      tarp : konteineris;
begin
  for i := 1 to n do
    begin
      max := i;
      for j := i + 1 to n do
         if kont[j].pel > kont[max].pel
            then begin
                   tarp := kont[j];
                   kont[j] := kont[max];
                   kont[max] := tarp;
                 end
     end
end;
{-----------------------------------------------------------------------}
function veliausia (dien, { paskutin‚ data, kada realizavus konteinerŤ }
                          { bus gautas pelnas }
                    n : integer; { konteineri— skai‡ius }
                    rez : eile) : integer; { konteineri— realizavimo }
                                           { tvarkaražtis }
  { randa v‚liausi… dien…, kada galima realizuoti konteinerŤ }
  var i, d : integer;
begin
  d := 0; { iežkoma diena }
  i := dien; { iežkosime dienos, kada galime realizuoti su pelnu }
  while (rez[i] <> 0) and (i > 1) do
    i := i - 1;
  if rez[i] = 0  { jei radome }
     then begin
            veliausia := i;
            exit
          end;
   { priežingu atveju iežkome toliau }
  i := n;
  while rez[i] <> 0 do
    i := i - 1;
  veliausia := i
end;
{-----------------------------------------------------------------------}
procedure prekes (kont : baze; { duomenys apie konteinerius }
                  n : integer; { konteineri— skai‡ius }
                  var pelnas : integer; { pelnas }
                  var rez : eile); { konteineri— realizavimo tvarka }
  var i, num, dien, pinig, d : integer;
begin
  rikiuoti (n, kont);   { surikiuojame pelno ma‘ejimo tvarka }
  pelnas := 0;
  for i := 1 to n do
    rez[i] := 0;
  for i := 1 to n do { per‘i–rime visus konteinerius }
    begin
      num := kont[i].nr;
      dien := kont[i].data;
      pinig := kont[i].pel;
      d := veliausia (dien, n,  rez); { randame v‚liausi… dien…, }
      { kada galime realizuoti konteinerŤ }
      rez[d] := num;
      if d <= dien { jei galiojimo laikas t… dien… nepasibaigŠs, }
                   { galime gauti pelno }
         then pelnas := pelnas + pinig;
    end
end;
{------------------------------------------------------------------------}

  var f : text;
      n, i, pelnas : integer;
      kont : baze;
      rez : eile;
begin
  assign (f, 'kont.dat');
  reset (f);
  readln (f, n);
  for i := 1 to n do
    begin
      readln (f, kont[i].data, kont[i].pel);
      kont[i].nr := i;
    end;
  close(f);

  prekes (kont, n, pelnas, rez);

  assign (f, 'kont.rez');
  rewrite (f);
  writeln (f, pelnas);
  for i := 1 to n do
    writeln (f, rez[i]);
  close(f);
end.