WITH RECURSIVE
    x(i) AS ( VALUES (0)
              UNION ALL SELECT i + 1
                        FROM x
                        WHERE i < 101),
    Z(Ix, Iy, Cx, Cy, X, Y, I) AS (
    SELECT
      Ix,
      Iy,
      X :: FLOAT,
      Y :: FLOAT,
      X :: FLOAT,
      Y :: FLOAT,
      0
    FROM
      (SELECT
         -2.2 + 0.031 * i,
         i
       FROM x) AS xgen(x, ix) CROSS JOIN
      (SELECT
         -1.5 + 0.031 * i,
         i
       FROM x) AS ygen(y, iy)
    UNION ALL
    SELECT
      Ix,
      Iy,
      Cx,
      Cy,
      X * X - Y * Y + Cx AS X,
      Y * X * 2 + Cy,
      I + 1
    FROM Z
    WHERE X * X + Y * Y < 16.0
          AND I < 27),
    Zt (Ix, Iy, I) AS (
      SELECT
        Ix,
        Iy,
        MAX(I) AS I
      FROM Z
      GROUP BY Iy, Ix
      ORDER BY Iy, Ix
  )
SELECT array_to_string(
    array_agg(SUBSTRING(
                  ' .,,,-----++++%%%%@@@@#### ', GREATEST(I, 1),
                  1
              )), ''
)
FROM Zt
GROUP BY Iy
ORDER BY Iy;