with ada.integer_text_io; use ada.integer_text_io;
with ada.text_io; use ada.text_io;

procedure modes2 is

    -- Try changing to in params and then out params
    procedure sumPowers(v: in integer; c, sv, ss, sc: in out integer) is
    begin
        c := c + 1;
        sv := sv + v;
        ss := ss + v * v;
        sc := sc + v * v * v;
    end sumPowers;

    -- Try changing to in params and then out params
    procedure doit(cVals, sum1, sum2, sum3: in out integer) is
        value: integer;    -- Stores input value
    begin
        loop
            exit when end_of_file;
            get(value);
            sumPowers(value, cVals, sum1, sum2, sum3);
        end loop;
    end doit;

    procedure putResults(cvs, s1, s2, s3: in integer) is
    begin
        put(cvs);
        put(s1);
        put(s2);
        put(s3);
        new_line;
    end putResults;

    countValues, sumSquares, sumValues, sumCubes: integer := 0;

begin
    doit(countValues, sumValues, sumSquares, sumCubes);
    putResults(countValues, sumValues, sumSquares, sumCubes);

end modes2;