program atsiskaitymas_skolomis;
{ 51 u‘davinys }
  const MAX = 10000; { maksimalus moni— skai‡ius }
        TIKSLUMAS = 0.00001;
  type bankas = array [0..MAX] of real;

  function didz (ban: bankas; skol: boolean): integer;
  { randa daugiausiai bankui siskolinusi… (paskolinusi…) monŠ }
    var im, i: integer;
  begin
    im := 0; { prad‘ioje tai bus priktyvi mon‚ }
    for i := 1 to MAX do
      if ((ban[i] < 0) xor not skol) and
         ((im = 0) or (abs(ban[im]) < abs (ban[i])))
         then im := i;
    didz := im
  end; { did‘ }

  function min (x, y: real): real;
  begin
    if x < y
       then min := x
       else min := y
  end; { min }

  var pr, rez: text;
      ban: bankas;
      bnk, prad, gal, suma: real;
      i, a, b: integer;
begin
  assign (pr, 'SKOLOS.DAT');
  reset (pr);
  assign (rez, 'SKOLOS.REZ');
  rewrite (rez);
  prad := 0; { pradin‚ skol— suma }
  for i := 0 to MAX do
    ban[i] := 0;
  { sudarysime priktyv— bank… }
  readln (pr, a, b, suma);
  while a <> 0 do { kol nesutinkamas ražas iž nuli— }
    begin
      prad := prad + suma;
      ban[a] := ban[a] - suma;  { mon‚ A skolinasi iž banko }
      ban[b] := ban[b] + suma;  { mon‚ B deda pinigus  bank… }
      readln (pr, a, b, suma)
    end;
  close (pr);
  { rasime galutinŠ skol— sum… }
  gal := 0;
  for i := 1 to MAX do
    if ban[i] > 0
       then gal := gal + ban[i];
  writeln (rez, 'Pradin‚ skol— suma: ', prad: 9: 2);
  writeln (rez, 'Galutin‚ skol— suma: ', gal: 8: 2);
  if gal > 0
  then
   begin
    writeln (rez, 'Galutinis skol— s…ražas:');
    { perskirstysime skolas }
    bnk := gal;
    while bnk > TIKSLUMAS do
      begin
        a := didz (ban, true);  { ži mon‚ daugiausia siskolinusi bankui }
        b := didz (ban, false); { ži mon‚ daugiausiai pinig— pad‚jusi  bank… }
        suma := min (abs(ban[a]), ban[b]);
        ban[a] := ban[a] + suma;
        ban[b] := ban[b] - suma;
        bnk := bnk - suma;
        writeln (rez, a: 6, b: 6, suma: 8: 2);
      end;
    end;
   close (rez);
end.