fork download
  1. import java.util.*;
  2. import static java.lang.Math.*;
  3.  
  4. public class Main {
  5. public static void main(String[] args) {
  6. Plotter plotter = new ConsolePlotter(50, 50);
  7.  
  8. // plotRotations(plotter, ImageFactory.line(50), 100);
  9. plotRotations(plotter, ImageFactory.propeller(50), 30);
  10. plotRotations(new ConsolePlotter(40,40), ImageFactory.fromStrings(
  11. "* ******************",
  12. "* * ",
  13. "* * ",
  14. "* * ",
  15. "* * ",
  16. "* * ",
  17. "* * ",
  18. "* * ",
  19. "* * ",
  20. "* * ",
  21. "* * ",
  22. "* * ",
  23. "* * ",
  24. "* * ",
  25. "* * ",
  26. "* * ",
  27. "* * ",
  28. "***********************************",
  29. " * *",
  30. " * *",
  31. " * *",
  32. " * *",
  33. " * *",
  34. " * *",
  35. " * *",
  36. " * *",
  37. " * *",
  38. " * *",
  39. " * *",
  40. " * *",
  41. " * *",
  42. " * *",
  43. " * *",
  44. " * *",
  45. "****************** *"
  46. ), 30);
  47. }
  48.  
  49. private static void plotRotations(Plotter plotter, Image line, int n) {
  50. line.plot(plotter);
  51.  
  52. for (int d = 0; d < n; d++) {
  53. line.rotate(2 * PI / n);
  54. line.plot(plotter);
  55. }
  56. }
  57. }
  58.  
  59. class Point {
  60. public double x;
  61. public double y;
  62.  
  63. Point(double x, double y) {
  64. this.x = x;
  65. this.y = y;
  66. }
  67.  
  68. public void rotate(double centerX, double centerY, double angle) {
  69. double xx = x - centerX;
  70. double yy = y - centerY;
  71. double radius = sqrt(pow(xx, 2) + pow(yy, 2));
  72. double fi = atan2(yy, xx);
  73. double fia = fi + angle;
  74. double yya = sin(fia) * radius;
  75. double xxa = cos(fia) * radius;
  76. x = centerX + xxa;
  77. y = centerY + yya;
  78. }
  79. }
  80.  
  81. class ImageFactory {
  82. public static Image line(int n) {
  83. int n2 = n / 2;
  84. Image image = new Image();
  85. for (int i = -n2; i < n2; i++) {
  86. image.add(i, 0);
  87. }
  88. return image;
  89. }
  90.  
  91. public static Image propeller(int n) {
  92. Image line1 = line(n);
  93. Image line2 = line(n);
  94. line2.rotate(PI / 2);
  95. line1.append(line2);
  96. return line1;
  97. }
  98.  
  99. public static Image fromStrings(String... lines) {
  100. int lenx = lines[0].length();
  101. for (String line : lines) {
  102. if (lenx != line.length()) {
  103. }
  104. }
  105. int leny = lines.length;
  106.  
  107. Image image = new Image();
  108.  
  109. for (int y = 0; y < leny; y++) {
  110. String line = lines[y];
  111. for (int x = 0; x < line.length(); x++) {
  112. char c = line.charAt(x);
  113. if (c != ' ') {
  114. image.add(x - lenx / 2, y - leny / 2);
  115. }
  116. }
  117. }
  118. return image;
  119. }
  120. }
  121.  
  122. class Image {
  123. private List<Point> points = new ArrayList<>();
  124.  
  125. public void plot(Plotter plotter) {
  126. for (Point point : points) {
  127. plotter.plot(point);
  128. }
  129.  
  130. plotter.flush();
  131. }
  132.  
  133. public void rotate(double angle) {
  134. for (Point point : points) {
  135. point.rotate(0, 0, angle);
  136. }
  137. }
  138.  
  139. public void add(double x, double y) {
  140. points.add(new Point(x, y));
  141. }
  142.  
  143. public void append(Image image) {
  144. for (Point p : image.points) {
  145. points.add(p);
  146. }
  147. }
  148. }
  149.  
  150. interface Plotter {
  151. void plot(Point point);
  152.  
  153. void flush();
  154. }
  155.  
  156. class ConsolePlotter implements Plotter {
  157. private List<IntPoint> buffer = new ArrayList<>();
  158. private final int width;
  159. private final int height;
  160.  
  161. public ConsolePlotter(int width, int height) {
  162. this.width = width;
  163. this.height = height;
  164. }
  165.  
  166. static class PointComparator implements Comparator<IntPoint> {
  167. @Override
  168. public int compare(IntPoint p1, IntPoint p2) {
  169. int yres = Integer.compare(p1.y, p2.y);
  170. return yres != 0 ? yres : Integer.compare(p1.x, p2.x);
  171. }
  172. }
  173.  
  174. static class IntPoint {
  175. int x;
  176. int y;
  177.  
  178. IntPoint(int x, int y) {
  179. this.x = x;
  180. this.y = y;
  181. }
  182.  
  183. @Override
  184. public String toString() {
  185. return "{" + x + "," + y + "}";
  186. }
  187. }
  188.  
  189. @Override
  190. public void plot(Point point) {
  191. buffer.add(new IntPoint((int) point.x, (int) point.y));
  192. }
  193.  
  194. @Override
  195. public void flush() {
  196. System.out.println();
  197. normalize();
  198. Collections.sort(buffer, new PointComparator());
  199. out();
  200. buffer.clear();
  201. }
  202.  
  203. private void out() {
  204. int row = 0, pos = 0;
  205. for (IntPoint p : buffer) {
  206. if (p.y > row) {
  207. for (int i = 0; i < p.y - row; i++) {
  208. System.out.print('\n');
  209. }
  210. row = p.y;
  211. pos = 0;
  212. }
  213.  
  214. if (p.x > pos) {
  215. for (int i = 0; i < p.x - pos; i++) {
  216. System.out.print(' ');
  217. }
  218. pos = p.x;
  219. }
  220.  
  221. System.out.print('#');
  222. pos++;
  223. }
  224. }
  225.  
  226. private void normalize() {
  227. int minx = Integer.MAX_VALUE;
  228. int miny = Integer.MAX_VALUE;
  229. int maxx = Integer.MIN_VALUE;
  230. int maxy = Integer.MIN_VALUE;
  231. for (IntPoint p : buffer) {
  232. if (p.x < minx) {
  233. minx = p.x;
  234. }
  235. if (p.y < miny) {
  236. miny = p.y;
  237. }
  238. if (p.x > maxx) {
  239. maxx = p.x;
  240. }
  241. if (p.y > maxy) {
  242. maxy = p.y;
  243. }
  244. }
  245.  
  246. int deltax = minx > 0 ? 0 : -minx;
  247. int deltay = miny > 0 ? 0 : -miny;
  248.  
  249. maxx += deltax;
  250. maxy += deltay;
  251.  
  252. if (maxx < width) {
  253. deltax += (width - maxx) / 2;
  254. }
  255.  
  256. if (maxy < height) {
  257. deltay += (height - maxy) / 2;
  258. }
  259.  
  260. for (IntPoint p : buffer) {
  261. p.x += deltax;
  262. p.y += deltay;
  263. }
  264. }
  265. }
Runtime error #stdin #stdout 0.46s 215872KB
stdin
Standard input is empty
stdout
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
###################################################
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #

                              #
                             #
                             #
                             #
                             #
                             #
                            #
                            #
                            #
                            #
                            #
                           #
                           #
                           #
                           #
                           #
                          #
                          #
                          #
 #                        #
  #####                   #
       #####             #
            #####        #
                 #####   #
                      ############
                         #   #####
                         #        #####
                         #             #####
                        #                   #####
                        #
                        #
                        #
                        #
                       #
                       #
                       #
                       #
                       #
                      #
                      #
                      #
                      #
                      #
                     #
                     #
                     #
                     #
                     #



                                   #
                                  ##
                                 #
                                 #
                                 #
                                #
                                #
                               #
                               #
                               #
                              #
                              #
   #                         ##
    ##                       #
     ###                    #
        ##                  #
          ###              #
             ##            #
               ###         #
                 ##       #
                   ###    #
                      ## #
                        ########
                         # ##
                        #    ###
                        #       ##
                       #          ###
                       #            ##
                       #              ###
                      #                  ##
                      #                    ###
                     #                        ##
                     ##
                    #
                    #
                   #
                   #
                   #
                  #
                  #
                 #
                 #
                 #
                ##





                                       #
                                       #
                                      #
                                     #
                                    ##
                                    #
     ##                            #
       #                          #
        ##                       ##
         ##                      #
           #                    #
            ##                  #
             ##               ##
               ##             #
                 #           #
                 ##          #
                   ##      ##
                     #     #
                     ##   #
                       ## #
                         ######
                        # ##
                        #   ##
                       #     #
                      ##      ##
                     #          ##
                     #           #
                    #             ##
                   ##               ##
                  #                  ##
                  #                    #
                 #                      ##
                ##                       ##
                #                          #
               #                            #
              #
             ##
             #
            #
           #







        #
        ##
          #                              ##
          #                              #
           ##                          ##
            #                         #
             #                       ##
              ##                    #
               #                   ##
                #                 #
                ##              ##
                  #             #
                  #           ##
                   ##        #
                    #       ##
                     #     #
                      ##  ##
                       # #
                        ######
                       # #
                      ##  ##
                     #     #
                   ##       #
                   #        ##
                 ##           #
                #             #
               ##              ##
              #                 #
             ##                  #
            #                     ##
          ##                       #
          #                         #
        ##                          ##
       #                              #
       #                              #
                                       ##




            #
            #
             ##
              #
              #
               #
               #
                #
                #
                 ##                         ##
                  #                        ##
                  #                      ##
                   #                   ##
                   #                 ##
                    #               ##
                    ##            ##
                     #          ##
                      #       ##
                      #      ##
                       #   ##
                       # ##
                       #######
                     ##  #
                    #    #
                  ###     #
                ##        #
               #          #
            ###            ##
           ##               #
          #                  #
       ###                   #
     ##                      #
     #                        #
    #                          ##
                                #
                                #
                                 #
                                 #
                                  #
                                  #
                                   ##
                                   #


                 #
                 #
                 #
                  #
                  ##
                   #
                   #
                   #
                    #
                    #
                    #
                    #
                     #
                     #
                     #
                      #
                      #                      ###
                      #                    ###
                       #                ###
                       #            ####
                       #         ###
                        #     ###
                        #  ###
                      ##########
                   ###  #
                ###     #
             ###         #
         ####            #
      ###                #
    ###                   #
  ##                      #
                          #
                           #
                           #
                           #
                            #
                            #
                            #
                            #
                             #
                             #
                             #
                              ##
                              #
                               #
                               #

                      #
                      #
                      #
                      #
                      #
                      #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                        #
                        #
                        #
                        #
                        #
                        #
                        #                  ######
                        #        ##########
                ######################
      ##########        #
 #####                  #
                        #
                        #
                        #
                        #
                        #
                        #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                          #
                          #
                          #
                          #
                          #

                          #
                          #
                          #
                          #
                          #
                          #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                         #
                        #
                        #
                        #
                        #
                        #
                        #
 #####                  #
      ##########        #
                ######################
                        #        ##########
                        #                  ######
                        #
                        #
                        #
                        #
                        #
                        #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                       #
                      #
                      #
                      #
                      #
                      #


                               #
                               #
                               #
                              #
                              ##
                             #
                             #
                             #
                            #
                            #
                            #
                            #
                           #
                           #
                           #
                          #
  ##                      #
    ###                   #
      ###                #
         ####            #
             ###         #
                ###     #
                   ###  #
                      ##########
                        #  ###
                        #     ###
                       #         ###
                       #            ####
                       #                ###
                      #                    ###
                      #                      ###
                      #
                     #
                     #
                     #
                    #
                    #
                    #
                    #
                   #
                   #
                   #
                  ##
                  #
                 #
                 #




                                    #
                                   #
                                  ##
                                  #
                                 #
                                 #
                                #
                                #
                               #
                              ##
    ##                        #
     ##                      #
       ##                    #
         ##                 #
           ##               #
            ##             ##
              ##          #
                ##        #
                  ##     #
                   ##    #
                     ## #
                       ########
                       #  ##
                       #    ##
                      #       ##
                      #        ##
                     #           ##
                    ##             ##
                    #               ##
                   #                  ##
                   #                    ##
                  #                       ##
                  #                        ##
                 ##                          #
                #
                #
               #
               #
              #
              #
             ##
            #







                                        #
                                       ##
       #                              #
       #                              #
        ##                          ##
          #                         #
          ##                       #
            #                     ##
             ##                  #
              #                 #
               ##              ##
                #             #
                 ##           #
                   #        ##
                   ##       #
                     #     #
                      ##  ##
                       # #
                        ######
                       # #
                      ##  ##
                     #     #
                    #       ##
                   ##        #
                  #           ##
                  #             #
                ##              ##
                #                 #
               #                   ##
              ##                    #
             #                       ##
            #                         #
           ##                          ##
          #                              #
          #                              ##
        ##





          #
           #
            #
            ##
             #
              #                            ##
               #                          #
               ##                       ##
                #                      ##
                 #                    #
                 #                  ##
                  ##               ##
                   #             ##
                    #           #
                    #          ##
                     ##      ##
                      #     #
                       #   ##
                       # ##
                        ######
                      ## #
                    ##   #
                    #     #
                  ##      ##
                ##          #
                #           #
              ##             #
            ##               ##
           ##                  #
          #                    #
        ##                      #
       ##                       ##
      #                          #
     #                            #
                                   #
                                   ##
                                    #
                                     #
                                      #
                                      #



               ##
                #
                #
                #
                 #
                 #
                  #
                  #
                  #
                   #
                   #
                    ##                        #
                    #                        ##
                     #                    ###
                     #                  ##
                      #              ###
                      #            ##
                      #          ###
                       #       ##
                       #    ###
                        # ##
                       ########
                     ## #
                  ###    #
                ##       #
              ###         #
            ##            #
         ###              #
       ##                  #
    ###                    #
   ##                       #
                            ##
                             #
                             #
                              #
                              #
                              #
                               #
                               #
                                #
                                #
                                #
                                 ##
                                  #

                    #
                    #
                    #
                    #
                    #
                     #
                     #
                     #
                     #
                     #
                      #
                      #
                      #
                      #
                      #
                       #
                       #
                       #
                       #                        #
                       #                   #####
                        #             #####
                        #        #####
                        #   #####
                     ############
                #####   #
           #####        #
      #####             #
 #####                   #
                         #
                         #
                         #
                         #
                          #
                          #
                          #
                          #
                          #
                           #
                           #
                           #
                           #
                           #
                            #
                            #
                            #
                            #
                            #
                             #

                        #
                        #
                        #

                        ##

                        ##

                        #
                        ##

                        #
                        ##
                        #
                        #
                        #

                        #
                        ##
                        #

                        ##

                        #
 #####################################################
                        #
                        #
                        #

                        ##

                        ##

                        #
                        #
                        ##

                        #
                        ##
                        #

                        #
                        #
                        #
                        #
                        #
                        ##
                        #
                        #

                            #
                            #
                            #
                            #
                            #
                           #
                           #
                           #
                           #
                           #
                          #
                          #
                          #
                          #
                          #
                         #
                         #
                         #
                         #
 #####                   #
      #####             #
           #####        #
                #####   #
                     ############
                        #   #####
                        #        #####
                        #             #####
                       #                   #####
                       #                        #
                       #
                       #
                       #
                      #
                      #
                      #
                      #
                      #
                     #
                     #
                     #
                     #
                     #
                    #
                    #
                    #
                    #
                    #
                   #



                                 ##
                                #
                                #
                                #
                               #
                               #
                              #
                              #
                              #
                             #
                             #
                            ##
   ##                       #
    ###                    #
       ##                  #
         ###              #
            ##            #
              ###         #
                ##       #
                  ###    #
                     ## #
                       ########
                        # ##
                       #    ###
                       #       ##
                      #          ###
                      #            ##
                      #              ###
                     #                  ##
                     #                    ###
                    #                        ##
                    ##                        #
                   #
                   #
                  #
                  #
                  #
                 #
                 #
                #
                #
                #
               ##
              #





                                      #
                                     #
                                    #
                                   ##
                                   #
     #                            #
      #                          #
       ##                       ##
        ##                      #
          #                    #
           ##                  #
            ##               ##
              ##             #
                #           #
                ##          #
                  ##      ##
                    #     #
                    ##   #
                      ## #
                        ######
                       # ##
                       #   ##
                      #     #
                     ##      ##
                    #          ##
                    #           #
                   #             ##
                  ##               ##
                 #                  ##
                 #                    #
                #                      ##
               ##                       ##
               #                          #
              #                            ##
             #
            ##
            #
           #
          #
          #







         ##
           #                              #
           #                              #
            ##                          ##
             #                         #
              #                       ##
               ##                    #
                #                   ##
                 #                 #
                 ##              ##
                   #             #
                   #           ##
                    ##        #
                     #       ##
                      #     #
                       ##  ##
                        # #
                         ######
                        # #
                       ##  ##
                      #     #
                    ##       #
                    #        ##
                  ##           #
                 #             #
                ##              ##
               #                 #
              ##                  #
             #                     ##
           ##                       #
           #                         #
         ##                          ##
        #                              #
       ##                              #
                                        ##
                                         #




             #
              ##
               #
               #
                #
                #
                 #
                 #
                  ##                         #
                   #                        ##
                   #                      ##
                    #                   ##
                    #                 ##
                     #               ##
                     ##            ##
                      #          ##
                       #       ##
                       #      ##
                        #   ##
                        # ##
                         ######
                       ## #
                    ###   #
                   #       #
                  ##       #
               ###          #
              #             ##
             ##              #
           ##                 #
         ##                   #
       ##                      #
     ###                       #
    #                           ##
                                 #
                                 #
                                  #
                                  #
                                   #
                                   #
                                    ##
                                     #
                                     #


                  #
                  #
                   #
                   ##
                    #
                    #
                    #
                     #
                     #
                     #
                     #
                      #
                      #
                      #
                       #
                       #                      ##
                       #                    ###
                        #                ###
                        #            ####
                        #         ###
                         #     ###
                         #  ###
                       ##########
                    ###  #
                 ###     #
              ###         #
          ####            #
       ###                #
     ###                   #
  ###                      #
                           #
                            #
                            #
                            #
                             #
                             #
                             #
                             #
                              #
                              #
                              #
                               ##
                               #
                                #
                                #
                                #

                       #
                       #
                       #
                       #
                       #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                         #
                         #
                         #
                         #
                         #
                         #
                         #                  #####
                         #        ##########
                 ######################
       ##########        #
 ######                  #
                         #
                         #
                         #
                         #
                         #
                         #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                           #
                           #
                           #
                           #
                           #
                           #

                           #
                           #
                           #
                           #
                           #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                          #
                         #
                         #
                         #
                         #
                         #
                         #
 ######                  #
       ##########        #
                 ######################
                         #        ##########
                         #                  #####
                         #
                         #
                         #
                         #
                         #
                         #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                        #
                       #
                       #
                       #
                       #
                       #
                       #


                                #
                                #
                               #
                               ##
                              #
                              #
                              #
                             #
                             #
                             #
                             #
                            #
                            #
                            #
                           #
  ###                      #
     ###                   #
       ###                #
          ####            #
              ###         #
                 ###     #
                    ###  #
                       ##########
                         #  ###
                         #     ###
                        #         ###
                        #            ####
                        #                ###
                       #                    ###
                       #                      ##
                       #
                      #
                      #
                      #
                     #
                     #
                     #
                     #
                    #
                    #
                    #
                   ##
                   #
                  #
                  #
                  #




                                    #
                                   ##
                                   #
                                  #
                                  #
                                 #
                                 #
                                #
    #                          ##
     ##                        #
      ##                      #
        ##                    #
          ##                 #
            ##               #
             ##             ##
               ##          #
                 ##        #
                   ##     #
                    ##    #
                      ## #
                        ########
                         # ##
                        #    ##
                        #      ##
                       #        ##
                       #          ##
                      ##            ##
                     #               ##
                     #                 ##
                    #                    ##
                    #                      ##
                   #                        ##
                  ##
                  #
                 #
                 #
                #
                #
               #
              ##
              #
             #







                                        ##
       ##                              #
        #                              #
         ##                          ##
           #                         #
           ##                       #
             #                     ##
              ##                  #
               #                 #
                ##              ##
                 #             #
                  ##           #
                    #        ##
                    ##       #
                      #     #
                       ##  ##
                        # #
                         ######
                        # #
                       ##  ##
                      #     #
                     #       ##
                    ##        #
                   #           ##
                   #             #
                 ##              ##
                 #                 #
                #                   ##
               ##                    #
              #                       ##
             #                         #
            ##                          ##
           #                              #
           #                              #
         ##
         #





           #
           #
            #
             #
             ##
              #
               #                            #
                #                          #
                ##                       ##
                 #                      ##
                  #                    #
                  #                  ##
                   ##               ##
                    #             ##
                     #           #
                     #          ##
                      ##      ##
                       #     #
                        #   ##
                        # ##
                         ######
                       ## #
                     ##   #
                     #     #
                   ##      ##
                 ##          #
                 #           #
               ##             #
             ##               ##
            ##                  #
           #                    #
         ##                      #
        ##                       ##
       #                          #
     ##                            #
                                    #
                                    ##
                                     #
                                      #
                                       #



               #
                ##
                 #
                 #
                 #
                  #
                  #
                   #
                   #
                   #
                    #
                    #
                     ##
                     #                        ##
                      #                    ###
                      #                  ##
                       #              ###
                       #            ##
                       #          ###
                        #       ##
                        #    ###
                         # ##
                        ########
                      ## #
                   ###    #
                 ##       #
               ###         #
             ##            #
          ###              #
        ##                  #
     ###                    #
    ##                       #
   #                         ##
                              #
                              #
                               #
                               #
                               #
                                #
                                #
                                 #
                                 #
                                 #
                                  ##

                    #
                     #
                     #
                     #
                     #
                     #
                      #
                      #
                      #
                      #
                      #
                       #
                       #
                       #
                       #
                       #
                        #
                        #
                        #
                        #
                        #                   #####
                         #             #####
                         #        #####
                         #   #####
                      ############
                 #####   #
            #####        #
       #####             #
  #####                   #
 #                        #
                          #
                          #
                          #
                           #
                           #
                           #
                           #
                           #
                            #
                            #
                            #
                            #
                            #
                             #
                             #
                             #
                             #
                             #

                          #
                          #
                          ##
                          #
                          #
                          #
                          #

                          #
                          #
                          #
                          ##

                          ##
                          #
                          #

                          #
                          #
                          ##

                          #
                          #
                          #
 ## ###################################################
                          #

                          ##

                          #
                          ##
                          #

                          #
                          ##

                          ##
                          #

                          ##
                          #

                          ##

                          ##
                          #

                          #
                          #



   #                ##################
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   ###################################
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
   ##################                #
       #
       #
       #
       #
       #               ####
      #                #   ####
      #                #       #####
      #               #             #####
      #               #
      #               #
     #                #
     #                #
     #               #
     #               #
    #                #
    #                #
    #                #
    ###             #
       #####        #
            #####   #
                 ###########
                    #   #####
                    #        #####
                    #             ###
                   #                #
                   #                #
                   #                #
                   #               #
                   #               #
                  #                #
                  #                #
                  #               #
                  #               #
#####             #               #
     #####       #                #
          ####   #                #
              ####               #
                                 #
                                 #
                                 #
                                 #
              #
             #
             #
             #
            #
            #
           ##
           #                ##
          #                 # ##
          #                 #   ###
         #                 #       ##
         #                 #         ###
         #                ##           ##
        #                 #              ###
        #                #                  #
       #                 #
       ###              #
          ##            #
            ###         #
              ##       #
                ###    #
                   ## #
                     #######
                      # ##
                     #    ###
                     #       ##
                    #          ###
                    #            ##
                    #              ###
                   #                 #
#                  #                #
 ###              #                 #
    ##            ##               #
      ###        #                 #
        ##       #                 #
          ###   #                 #
             ## #                 #
               ##                #
                                 ##
                                #
                                #
                               #
                               #
                               #
                              #
                    #
                   ##
                  #
                 #
                 #
                ##
               #
              #
              #
             ##
            #                   ##
            #                  ## #
           #                   #   ##
          #                   #      ##
          ##                  #       ##
           ##               ##          #
             ##             #            ##
               #           #              ##
               ##          #                #
                 ##      ##                  ##
                   #     #                    #
                   ##   #
                     ## #
                       #####
                      # ##
                      #   ##
#                    #     #
 ##                 ##      ##
  #                #          ##
   ##              #           #
     ##           #             ##
      #          ##               ##
       ##       #                  ##
         ##     #                   #
          ##   #                   #
            # ##                  #
             ##                   #
                                 ##
                                #
                                #
                               #
                              ##
                             #
                             #
                            #
                           ##
                          #
                         #
                        #
                        ##
                       #
                      #
                     ##
                    #
                  ##
                  #
                ##
               #
              ##
             #
              ##                    #
               #                   ###
                #                 #  ##
                ##              ##     #
                  #             #      #
                  #           ##        ##
                   ##        #           #
                    #       ##            #
                     #     #               ##
                      ##  ##                #
#                      # #                   #
 ###                    #####                 ###
   #                   # #                      #
    #                 ##  ##
     ##              #     #
      #            ##       #
       #           #        ##
       ##        ##           #
         #      #             #
         #     ##              ##
          ##  #                 #
           # ##                  #
            #                     ##
                                   #
                                 ##
                                 #
                               ##
                              #
                             ##
                            #
                           ##
                          #
                         #
                        ##
                        #
                       #
                             #
                           ##
                         ##
                        ##
                       ##
                     ##
                   ##
                  ##
                ##
               #
               #
                ##
                 #
                 #
                  #
                  #                  #
                   #               ## #
#                  ##             ##  #
 #                  #           ##     ##
 #                   #        ##        #
  #                  #       ##         #
  #                   #    ##            #
   ##                 #  ##              #
    ##                #######             ##
     #              ##  #                  ##
     #             #    #                   #
      #          ###     #                  #
      #        ##        #                   #
       ##     #          #                   #
        #  ###            ##                  #
        # ##               #
         #                  #
                            #
                            #
                             #
                              ##
                               #
                               #
                             ##
                            ##
                          ##
                        ##
                       ##
                      ##
                    ##
                  ##
                 #
                              ##
                            ###
                         ###
                     ####
                   ###
                ###
                 #
                 #
                 #
                 #
                  #
#                 #
##                #
 #                 #
 #                 #
  #                #
  #                 #                #
  #                 #            #####
   #                #         ###    #
   #                 #     ###        #
   #                 #  ###           #
   ##              #########          ##
    #           ###  #                 #
    #        ###     #                 #
     #    ###         #                #
     #####            #                 #
     #                #                 #
                       #                #
                       #                 #
                       #                 #
                        #                ##
                        #                 #
                        #
                         #
                         #
                         #
                         #
                        ###
                     ###
                  ####
               ###
            ###
           ##


                             #######
                    ##########
                   #
  #                #
  #                #
  #                #
  #                #
  #                #
  #                #
  #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #
   #                #        ########
   ##       #####################    ##
    ########        #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                    #                #
                     #                #
                     #                #
                     #                #
                     #                #
                     #                #
                     #                #
                     #                #
                     #
            ##########
     #######


     #
     #
     #               #########
     #               #        #########
     #               #
     #               #
     #               #
     #               #
     #               #
    #                #
    #               #
    #               #
    #               #
    #               #
    #               #
    #               #
    #               #
    ########        #
            #####################
                    #        ########
                    #               #
                    #               #
                    #               #
                    #               #
                    #               #
                    #               #
                    #               #
                   #                #
                   #               #
                   #               #
                   #               #
                   #               #
                   #               #
  #########        #               #
           #########               #
                                   #
                                   #
           #
          #
          #
          #
         #
         #                #
         #               # ###
        #                #    ####
        #                #       ###
        #                #          ###
       #                #              ###
       ##               #                 #
       #                #
      #                #
      #                #
      #                #
     #                #
      ####            #
          ###         #
             ###     #
                ###  #
                   #########
                     #  ###
                     #     ###
                    #         ###
                    #            ####
                    #                #
                   #                #
                   #                #
                   #                #
                  #                #
#                 #                ##
 ###              #                #
    ###          #                #
       ###       #                #
          ####   #                #
             ### #               #
                #                #
                                 #
                                #
                                #
                                #
                               #
                 #
                 #
                #
                #
               #
              ##
              #
             #
             #
            #                  ##
            #                 #  ##
           #                 ##   ##
          ##                 #      ##
          #                 #         ##
         #                  #           ##
         #                 #             ##
          ##               #               ##
           ##             ##                 ##
             ##          #
               ##        #
                 ##     #
                  ##    #
                    ## #
                      #######
                      #  ##
                      #    ##
                     #       ##
                     #        #
                    #          ###
##                 ##             ##
  ##               #               ##
    ##            #                  #
     ##           #                  #
       ##        #                  #
         ##      #                 ##
           ##   ##                 #
            ## #                  #
              ##                  #
                                 #
                                 #
                                #
                               ##
                               #
                              #
                              #
                             #
                             #
                       #
                       #
                      #
                     ##
                    #
                   #
                  ##
                 #
                 #
               ##
               #
              #
             ##                    #
            #                     ####
             ##                  #   #
              #                 #     ##
               ##              ##      #
                #             #         ##
                 ##           #           #
                   #        ##            ##
                   ##       #               #
                     #     #                 ##
                      ##  ##                  #
                       # #                     ##
                        #####
##                     # #
  #                   ##  ##
   ##                #     #
    #               #       ##
     ##            ##        #
      #           #           ##
       ##         #             #
         #      ##              ##
         ##     #                 #
           #   #                   ##
            ####                    #
             #                     ##
                                  #
                                 #
                                ##
                               #
                               #
                             ##
                             #
                            #
                           ##
                          #
                         #
                         #
                         ##
                         #
                       ##
                      ##
                     ##
                    #
                  ##
                 ##
                #
              ##
              #
              ##
               #
                #
                #                  ###
                 ##               ## #
                  #             ##    #
                   #           #       #
                   #          ##       ##
                    ##      ##          #
#                    #     #             #
##                    #   ##              #
  #                   # ##                ##
  ##                   #####               ##
   ##                ## #                   #
    #              ##   #                    ##
     #             #     #                    #
      #          ##      ##
      ##       ##          #
       #       #           #
        #    ##             #
         # ##               ##
         ###                  #
                              #
                               #
                               ##
                                #
                               ##
                              #
                            ##
                           ##
                          #
                        ##
                       ##
                      ##
                     #
                    ##
                             ##
                           ##
                         ###
                       ##
                      ##
                   ###
                 ##
                ##
                #
                #
                 #
                 #
                  ##
                  #
#                  #
#                  #
 #                  #              ####
 #                  #            ##   #
  ##                #          ###    #
  #                  #       ##        #
   #                 #    ###          #
   #                  # ##             #
    ##               #######            ##
     #             ## #                  #
     #          ###    #                 #
     #        ##       #                  #
      #     ###         #                 ##
      #   ##            #                  #
       ####             #                  #
                         #                  #
                         #                  #
                          #
                          ##
                           #
                           #
                            #
                            #
                            ##
                          ##
                       ###
                      ##
                    ##
                  ###
                ##
              ##
                                 #
                            #####
                       #####
                   #####
                 ##
                 #
                 #
#                 #
 #                #
 #                #
 #                #
 #                #
 #                 #
  #                #
  #                #
  #                #
  #                #
  #                 #             ###
   #                #        #####  #
   #                #   #####        #
   ##            ###########         ##
   #        #####   #                #
    #  #####        #                #
    ###             #                 #
                     #                #
                     #                #
                     #                #
                     #                #
                     #                 #
                      #                #
                      #                #
                      #                #
                      #                #
                      #                 #
                       #
                       #
                      ##
                  #####
             #####
        #####
       #



                    #################
   #                #
   #                ##
   #
   #                #
   #                ##
   #                #
   #                #
   #                #
   #
   #                #
   #                ##
   #                #
    #
   #                ##
   #
   #                #
   #######################################
                    #               #
                    #                #
                    #                #
                                     #
                    ##               #
                    #                #
                    #                #
                                     #
                    #                #
                    #                #
                    ##               #

                    ##               ##
                                     #
                    ##               #
      #  # #    # # #               #
    ### ### ###  ###
       #
       #
       #
       #
       #               ####
      #                #   ####
      #                #       #####
      #               #             #####
      #               #
      #               #
     #                #
     #                #
     #               #
     #               #
    #                #
    #                #
    #                #
    ###             #
       #####        #
            #####   #
                 ###########
                    #   #####
                    #        #####
                    #             ###
                   #                #
                   #                #
                   #                #
                   #               #
                   #               #
                  #                #
                  #                #
                  #               #
                  #               #
#####             #               #
     #####       #                #
          ####   #                #
              ####               #
                                 #
                                 #
                                 #
                                 #
              #
             #
             #
             #
            #
            #
           ##
           #                ##
          #                 # ##
          #                 #   ###
         #                 #       ##
         #                 #         ###
         #                ##           ##
        #                 #              ###
        #                #                  #
       #                 #
       ###              #
          ##            #
            ###         #
              ##       #
                ###    #
                   ## #
                     #######
                      # ##
                     #    ###
                     #       ##
                    #          ###
                    #            ##
                    #              ###
                   #                 #
#                  #                #
 ###              #                 #
    ##            ##               #
      ###        #                 #
        ##       #                 #
          ###   #                 #
             ## #                 #
               ##                #
                                 ##
                                #
                                #
                               #
                               #
                               #
                              #
                    #
                   ##
                  #
                 #
                 #
                ##
               #
              #
              #
             ##
            #                   ##
            #                  ## #
           #                   #   ##
          #                   #      ##
          ##                  #       ##
           ##               ##          #
             ##             #            ##
               #           #              ##
               ##          #                #
                 ##      ##                  ##
                   #     #                    #
                   ##   #
                     ## #
                       #####
                      # ##
                      #   ##
#                    #     #
 ##                 ##      ##
  #                #          ##
   ##              #           #
     ##           #             ##
      #          ##               ##
       ##       #                  ##
         ##     #                   #
          ##   #                   #
            # ##                  #
             ##                   #
                                 ##
                                #
                                #
                               #
                              ##
                             #
                             #
                            #
                           ##
                          #
                         #
                        #
                        ##