uses math, sysutils; var minx, maxx, miny, maxy, stepx, stepy, i, x0, f: integer; n, j, lenf: byte; raw_freq, freq: array of integer; xtrue, xfalse: array of string; function gcd(a, b: integer): integer; var c: integer; begin while b > 0 do begin c := b; b := a mod b; a := c end; gcd := a end; function rjust( s: string; width: byte; fill: char ): string; begin while length(s) < width do s := fill + s; rjust := s end; begin read(minx, maxx, miny, maxy, stepx, n); setlength(raw_freq, maxx - minx + 1); for i := 0 to length(raw_freq) - 1 do raw_freq[i] := 0; for i := 1 to n do begin readln(x0, f); raw_freq[x0 - minx] := f end; setlength(freq, length(raw_freq) div stepx); for i := 0 to length(freq) - 1 do begin freq[i] := 0; for j := 0 to stepx - 1 do inc(freq[i], raw_freq[i * stepx + j]); freq[i] := freq[i] div stepx end; stepy := maxy - miny + 1; for i in freq do stepy := gcd(stepy, i - miny + 1); lenf := 0; i := miny; repeat lenf := max(length(inttostr(i)), lenf); inc(i, stepy) until i > maxy; setlength(xfalse, length(freq)); setlength(xtrue, length(freq)); for i := 0 to length(freq) - 1 do begin xtrue[i] := rjust('', length(inttostr(minx + stepx * i)), '*'); xfalse[i] := rjust('', length(inttostr(minx + stepx * i)), ' '); for j := 1 to stepx - 1 do begin xtrue[i] := xtrue[i] + rjust('', length(inttostr(minx + stepx*i + j)) + 1, '*'); xfalse[i] := xfalse[i] + rjust('', length(inttostr(minx + stepx*i + j)) + 1, ' ') end end; repeat write(rjust(inttostr(maxy), lenf, ' ')); for i := 0 to length(freq) - 2 do begin if freq[i] >= maxy then write(xtrue[i]) else write(xfalse[i]); write(' ') end; if freq[length(freq) - 1] >= maxy then writeln(xtrue[length(freq) - 1]) else writeln(xfalse[length(freq) - 1]); dec(maxy, stepy) until maxy < miny; write(rjust('', lenf, ' ')); for i := minx to maxx - 1 do write(i, ' '); writeln(maxx) end.