Baltic Olympiad in Informatics | |||||
April 30 – May 3, 2010, Tartu, Estonia | |||||
Home About BOI Schedule Teams Tasks Practice First day Bears PCB Second day Test data Solutions Results Pictures Contest rules Contest environment Online contest General info Contact Printable version |
LegoYou are using Lego building blocks to train an artificial vision system. Write a program that, given pictures of a Lego construction taken from two angles, calculates in how many different ways it can be built. In this task, there is only one kind of lego block (with 2x2 "knobs", see picture below), but it can have three different colors: white (W), gray (G) or black (B). All blocks exist in unlimited amounts. You use a quadratic base with 6x6 knobs. Every block must have its edges parallel to this base and no block may extend outside of it. Every block must rest upon at least one underlying block.
Input DataThe first line of the file lego.in contains H (1 ≤ H ≤ 6), the height of the construction. Then follow H lines with 6 characters on each line, giving a picture of the construction as seen from one side (marked A on the figure below). The jth character on the ith line specifies what you see looking at the jth column from the left on the ith row from above. Each character may be one of 'W', 'G', 'B' or '.', specifying a color ('W', 'G', or 'B') or a hole ('.'). Note that you cannot estimate the depth, so a color seen in a certain position may either belong to a block near the front edge, or further back, provided no other block is blocking the sight. The first picture is followed by another set of H lines with the construction seen from an angle where the observer has moved 90 degrees counterclockwise around the construction (marked B on the figure below). Output DataThe program should output one line to the lego.out output file, containing a single integer: the number of different Lego constructions that satisfy the pictures given in the input. Note that even if two different possible constructions could be obtained from each other by rotating or mirroring, they both should be counted. For the given input, the answer will always fit in a signed 64-bit integer. Example
|