fork download
  1. #include <iostream>
  2. #include <random>
  3. #include <ctime>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <iterator>
  7.  
  8. enum colour_t { GREEN=0, RED=1, BLUE=2, BORDER_COLOUR = -1 };
  9.  
  10. // blue beats red, red beats green and green beats blue
  11. bool less( colour_t pixel, colour_t neighbour )
  12. {
  13. if( neighbour == BORDER_COLOUR ) return false ;
  14. else return (neighbour-pixel) == 1 || (neighbour-pixel) == -2 ;
  15. }
  16.  
  17. std::ostream& operator<< ( std::ostream& stm, colour_t c )
  18. {
  19. static constexpr char names[] = { '+', 'G', 'R', 'B' } ;
  20. return stm << names[c+1] ;
  21. }
  22.  
  23. colour_t random_colour()
  24. {
  25. static constexpr colour_t clrs[] = { GREEN, RED, BLUE } ;
  26. static std::mt19937 eng( std::time(nullptr) ) ;
  27. static std::uniform_int_distribution<int> dist(0,2) ;
  28. return clrs[ dist(eng) ] ;
  29. }
  30.  
  31. using grid_type = std::vector< std::vector<colour_t> > ;
  32.  
  33. std::ostream& operator<< ( std::ostream& stm, const grid_type& grid )
  34. {
  35. for( auto& row : grid )
  36. {
  37. for( auto c : row ) std::cout << c ;
  38. stm << '\n' ;
  39. }
  40. return stm ;
  41. }
  42.  
  43. colour_t next( const grid_type& grid, std::size_t i, std::size_t j )
  44. {
  45. colour_t clr = grid[i][j] ;
  46. if( clr == BORDER_COLOUR ) return BORDER_COLOUR ;
  47. else
  48. {
  49. for( int k : { j-1, j+1 } )
  50. if( less( clr, grid[i][k] ) ) return grid[i][k] ;
  51. for( int k : { i-1, i+1 } )
  52. if( less( clr, grid[k][j] ) ) return grid[k][j] ;
  53. }
  54. return clr ;
  55. }
  56.  
  57. grid_type& transform( grid_type& grid )
  58. {
  59. const auto cpy = grid ;
  60.  
  61. for( std::size_t i = 0 ; i < grid.size() ; ++i )
  62. for( std::size_t j = 0 ; j < grid[i].size() ; ++j )
  63. grid[i][j] = next( cpy, i, j ) ;
  64.  
  65. return grid ;
  66. }
  67.  
  68. grid_type make_grid( std::size_t rows, std::size_t cols )
  69. {
  70. rows += 2 ;
  71. cols += 2 ;
  72.  
  73. grid_type grid(rows) ;
  74. for( auto& row : grid )
  75. {
  76. std::generate_n( std::back_inserter(row), cols, random_colour ) ;
  77. row.front() = row.back() = BORDER_COLOUR ;
  78. }
  79. std::fill_n( std::begin( grid.front() ), cols, BORDER_COLOUR ) ;
  80. std::fill_n( std::begin( grid.back() ), cols, BORDER_COLOUR ) ;
  81.  
  82. return grid ;
  83. }
  84.  
  85. int main()
  86. {
  87. std::size_t rows ; std::cout << "rows? " ; std::cin >> rows ;
  88. std::size_t cols ; std::cout << "cols? " ; std::cin >> cols ;
  89.  
  90. grid_type grid = make_grid( rows, cols ) ;
  91. std::vector< grid_type > gens ;
  92.  
  93. while( std::find( gens.rbegin(), gens.rend(), grid ) == gens.rend() )
  94. {
  95. std::cout << grid << '\n' ;
  96. gens.push_back(grid) ;
  97. transform(grid) ;
  98. }
  99.  
  100. const auto rbegin = gens.rbegin() ;
  101. std::cout << "cycle of length "
  102. << std::find( rbegin, gens.rend(), grid ) - rbegin + 1 << '\n' ;
  103. }
  104.  
Success #stdin #stdout 0s 3440KB
stdin
12 30
stdout
rows? cols? ++++++++++++++++++++++++++++++++
+GRGBBRGRRRGRGBRRGGRRRRGBBRRRBB+
+GRGBRRGBRRGBBBGRBRRBRGRGBBRGBB+
+BGBBBRRBGRBGBRBRRGBRGGBGBRGRGR+
+RRBBGGBBRBBRBGBGBRRBBBRGBRGGBG+
+RRBBBBGGGBBBBBBGBBRRBGGGGBRBBR+
+RRBRBRGBBGRGRRBGBRBGRRRRBBBBRG+
+RGRGBGRRRGBRGGGRRBGGGGGBBRGGGR+
+GRRGRRBRRRGRBGBGBGBRRBBGBBGRBR+
+GRBRGGRRBGGRBGRGGRRRGRGBGGBRGG+
+GGBBBRBGRBGGGBGGBRRRBBGGRGRGBG+
+BGBRRBBRRGGBGRRRGBRRRRBBBGGGGR+
+BRRGRBRGBBRGBGRBBBRRBGRBBRRRGR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RRRGBBRBRRRBRGBRRRRBRRRGBBRBBB+
+RRRGBRRGBRRGGGRBGBBBBRBRGBBRGB+
+GRGBGBBGRBGRGBGBBRGBRGGGGBRRRB+
+BBBGGRGGBBBBGRGRGBBBGGBRGBRRGR+
+RBBBGGGGRGBGBGGGGBBBGRRRGGBGBB+
+RBBBBBRGGRBRBBGRGBGRBRRBGBGGBR+
+RRBRGRBBBRGBRRRRBGGRRRRGBBRRRR+
+RRBRBBBBBRRBGGGRGRGBBGGGGGRBGB+
+RBBBRRBBGRRBGRBRRRBRRBRGRGGBRR+
+GRGBGBGRBGGRGGRRGBRBGGGRBRBRGR+
+GRGBBBBBBRRGRBRBRGBRBBGGGRRRRR+
+BBBRBBBRGGBRGRBBGBBBGRBBBBRRRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RRRRGBBGBRBGBRGBRBBBBRBRGBBBGB+
+RRRRGBBRGBRRRRBGRGGBBBGBRGBBRG+
+RBRGGGGRBGRBRGRGGBRGBRGRGGBRBB+
+GBGGRBRGGGGGRBRBRGGGRRGBRGBRRB+
+BBBGGRRRBRGRGRGRGGGGRRBBRGGRGB+
+BBBBGGBRRBGBBGRRRGRBGBBGGGRRGB+
+RBBBRBBGGBRGBBRBGRRBBRRRGGBBBB+
+RBBBGBBBGBBGRRRRRRRGGRRGRRBGRG+
+BBGBBBGGRRBGRBGBRBGBBGBRBRRGBB+
+RBRGRGRBGRRBRRBBRGBGRGRBGBGBRR+
+RBRGGBGBGBBRBGBBBRGBGGGRRBBRRR+
+GBGBBBBBRRGBRBBGRGBGRBGGGBBRRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RRRRRGGRGBGRGBRGBGGBBBGBRGBGRG+
+RBRRRGGBRGBBBBGRRRRGBGGGBRGBBR+
+BBBRRGRBGRBGBRBRRGBRGBRBRGGBBG+
+RGRRBGBRGRRRBGBGBRRRBRRGBRGBBB+
+GBGGRBBBGBRBRBRBRGRRRBGGBRRRRG+
+BBBGRRGBBGRGGRRBRRBGRGGRRRBBRG+
+BBBBBGGRRGBRGGBGRRBGGBBRRRGGGG+
+BBGGRGGGRGGRBBRBRBRRRRBRBBGRBR+
+BGRGGGRRRBGRBGRGBGRGGRGBGBBRGG+
+BBBRBRBGRBBGBBGBBRGRBRBGRGRGBB+
+BBBRRGRGRGGBGRGGBBRGRGRBBBGBRR+
+RGRGGBGBBBRGBGGRBRGRBGGRRGBBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRRRRBRGRBRGBRGRRGBGGGBRGRBR+
+BBBRRRRGBRGGGGRRBRBRGGRGGBRGBB+
+BGBBBRBGRBGRGBGBBRGBRGBGBRGGGR+
+BRBBGGGBRBBBGRGRGBBBGBRRGBRGBG+
+RGRRBGGGGGBGBGBGBRBRBGRRGBBBBR+
+GBGRBBRGGRBRRBBGBBGRRRRRBBGGBR+
+BBGGGRRBBRGBRRGRRBGRRGGBBBRRRR+
+BGRRBRRRRRRBGGBGBGBRRBGBGGRBGB+
+GRBRRRBRBGRBGRRRGRRRRRRGRGGBRR+
+BGBBGBGRBGGRGGRGBBRBGBGRBRBRGG+
+BGBBBRBRBRRGRBRRGBBRBRBGBGRGBB+
+BRBRRGRGBGBRGRRBBBRBGGRBBRGBBR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BBBRRRBGBRBGBRGBRRBRGGRGGBRBBB+
+BGBBBRBRGBRRRRBBGBGBRRBRGGBRGB+
+GRGBGBGRBGRBRGRGGBRGBRGRGBRGRB+
+BBBGGRGGBGGGRBRBRGGGRGBRRGBRGR+
+BRBBGGRGRRGRGRGRGBGBGRRRRGGGBB+
+RGRBGGBRRBGBBGGRGGRRBRRBGGRRGB+
+GGRRRBBGGBRGBBRRBGRRRRRGGGBBBB+
+GRBBGBBBBRBGRRGRGRGBBGRGRRBGRG+
+RBBBBBGBGRBGRRBRRBBBRBRRBRRGBB+
+GRGGRGRBGRRBRRRRGBBGRGRBBBGBRR+
+GRGBGBGBBBBRBGBBRGBBGBGRGRBRGG+
+BBBBBRBRGRGBRBBBGBBGGRBGBBRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBBBGRGBGRGBRGBBGBRRBRGGBBGB+
+GRGBGBGBRGBBBBGGRGRGBBGBRGGBRG+
+RBRGGGRBGRBGBRBRRGBRGBRRRGBRBB+
+GBGGRBRRGRRRBGBGBRRRBRGBRRGBRB+
+BBBGGRBRBBRBRBRBRGRGRRBBRRRRGB+
+BRBGRGGBBGRGGRRRRRRBGBBGRRBBRG+
+RRBBBGGRRGBRGGBBGRRBBRRRRRGGGG+
+RBBGRGGGGBGRBBRRRBRGGRRRBBGRBR+
+BBGGGGRGRBGRRBGBBBGGBGBBBBBRGG+
+RBRRBRBGRBBGBRBBRGGRRRBBGGRGBB+
+RBRGRGRGGBGBGRGBBRGGRGRBRBGBRR+
+GBGBGBGBRBRGBGBGRGGGRBGRGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGBGGRBRGRBRGBRGGRGBBGBRGGGRG+
+RBRGGGRGBRGGGGRRBRBRGGRGBRGGBR+
+BBBRRRBGRBGRGBGBBRGBRGBBRRGBBG+
+RGRRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+GBGGRBGBGGBGBGBGBRRRBBGGBRBBRG+
+BBGRBRGGGRBRRBBBRRBGRGGRRBGGBR+
+BBBGGGRBBRGBRRGGRBBGGBBRBBRRRR+
+BBGRBRRRRGRBGGBBBBBRRRBBBGRBGB+
+BGRRRRBRBGRRBGRGBGRRGRGBGGGBRR+
+BBBBGBGRBBGRGBGBBRRRBBBGRRBRGG+
+BBBRBRBRRGRGRRRGBBRRRRBBBGRGBB+
+RGRGRGRGBBBRGRGRBRGRBGRBRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRGGRBGBRBGBRGBRRBRGGRGBRGRBR+
+BBBRRRBRGBRRRRBBGBGBRRBRGBRGGB+
+BGBBBBGRBGRBRGRGGBRGBRGGBRRGGR+
+BRBBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+RGRRBGGGRRGRGRGRGBBBGGRRGBGGBR+
+GGRBGBRGRBGBBGGGBBGRBRRRBGRRGB+
+BBGRGRBGGBRGBBRRBBGRRGGBBGBBBB+
+BGRBGBBBBRBGRRGGBGBBRBGBGRBGRG+
+GRBBBBGBGRRBGRBRGRBRRBRGRRRGBB+
+BGBGRGRBBGRRRGRGBBRBGBGRBBGBRR+
+BGBBGBGBBRBRRBRRGBBRBBBGGRBRGG+
+BRBRBRBRGGBBRRRBBBRBGRBBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BBBRRBGRGBGRGBRGBBGBRRBRGBRBGB+
+BGBBBBGBRGBBBBGGRGRGBBGBRGBRGG+
+GRGBGGRBGRBGBRBRRGBRGBRRGBBRRB+
+BBBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+BRBBGRRRBBRBRBRBRGGGRRBRRGRRGB+
+RRBGGGBRBGRGGRRRGGRBGBRBGRBBRG+
+GGRBRBGGRGBRGGBBBGRBBRRGGRGGGG+
+GRBGGGGGGBGRBBRRGRGBBGRGRBGRBR+
+RBBGGGRGRRBGRBGBRBBBBBBRBBBRGG+
+GRGRBRBBGRBBRRBRGBBGRGRBGGRGBB+
+GRGGRGRGGBBBBGBBRGBBGBGRRBGBRR+
+BBBBGBGBRRGBBBBBGBBGRBBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBBGRBRGRBRGBRGGRGBBGBRGBGGG+
+GRGBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+RBRGRRBGRBGRGBGBBRGBRGBBRGGBBG+
+GBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+BBBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+BBGGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+RRBGBGGRBRGBRRGBGRBBGBRRRBRRRR+
+RBGGRGRGRGRBGGBBRBRGGRBRBGRBGB+
+BBGRGRBRRBGRBGRGBBGGBGBBGGGBRR+
+RBRBGBBGRBBGBBGBRGGRBRBGRRBRGG+
+RBRRBRBRRGGBGRGBBRGGRGRBBGRGBB+
+GBGGRGRGBBRGBGBGRGGRBBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+RBRGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+BBBRBBGRBGRBRGRGGBRGBRGGBRRGGG+
+RGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+GBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+BGGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+BBGGGRRBGBRGBBRGRBBGRGBRBGBBBB+
+BGGRBRBRBRBGRRGGBBBRRBBBGRBGRG+
+BGRBRBBBBGRBGRBRGGRRGRGGRRRGBB+
+BBBGGGGRBGGRGGRGBRRBBBGRBBGBRR+
+BBBBGBBBBRRGRBRGBBRRBRBGGRBRGG+
+RGRRBRBRGGBRGRGRBRRBBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+BBBRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+BRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+RGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+GGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+BGGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+GGRBGBBBGBGRBBRRGGBBBGGGRBGRBR+
+GRBGBGGBGRBGRBGBRRBBRBRRBBBRGG+
+BGGGRGRBGRRBRRBRGBBBGGRBGGRGBB+
+BGBGGGGBGBBRBGBRGBBBBBGRRBGBRR+
+BRBBGBBBRRGBRBRBBBBBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BBBRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+BRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+RRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+GGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGGGRGRBGGBBRRGBGRRRBGRBGB+
+RBGGGGRGRBGRBGRGBBBBBGBBGGGBRR+
+GRGRBRBGRBBGBBGBRGBGRRBGRRBRGG+
+GRGGRGRGRGGBGRGBRGBBGGRBBGRGBB+
+BBBGGGGBBBRGBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+BBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+RRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRRRBRBGRRGGBBRGRBBBGRBGRG+
+BGGRRRBRBGRBGRBRGGGGGRGGRRRGBB+
+RBRBGBGRBGGRGGRGBRGRBBGRBBGBRR+
+RBRRBRBRBRRGRBRGBRGGRRBGGRBRGG+
+GBGGRGRGBGBRGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+BBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBBBGBGRBBRRGGBRBGGGRBGRBR+
+GGRBBBGBGRBGRBGBRRRRRBRRBBBRGG+
+BGBGRGRBGRRBRRBRGBRBGGRBGGRGBB+
+BBBBGBGBBBBRBGBRGBRRBBGRRBGBRR+
+RGRRBRBRGRGBRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGGGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGRGRBGRBGRGBBBBBGBBGGGBRR+
+GGGRBRBGRBBGBBGBRGBGRRBGRRBRGG+
+BGBGRGRGGBGBGRGBRGBBGGRBBGRGBB+
+BRBBGBGBRBRGBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+RBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+GRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRRRBRBGRRGGBBRGRBBBGRBGRG+
+RBGRRRBRBGRBGRBRGGGGGRGGRRRGBB+
+GRRBGBGRBBGRGGRGBRGRBBGRBBGBRR+
+GRGRBRBRRGRGRBRGBRGGRRBGGRBRGG+
+BBBGRGRGBBBRGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+RBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBBBGBGRBBRRGGBRBGGGRBGRBR+
+BGRBBBGBGRBGRBGBRRRRRBRRBBBRGG+
+RBBGRGRBBGRBRRBRGBRBGGRBGGRGBB+
+RBRBGBGBBRBRBGBRGBRRBBGRRBGBRR+
+GBGRBRBRGGBBRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGGGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGRGRBGRBGRGBBBBBGBBGGGBRR+
+BGGRBRBBGRBGBBGBRGBGRRBGRRBRGG+
+BBBGRGRGGBBBGRGBRGBBGGRBBGRGBB+
+RGRBGBGBRRGBBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+RBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+GRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRRRBRBGRRGGBBRGRBBBGRBGRG+
+RBGRRRBRBGRBGRBRGGGGGRGGRRRGBB+
+GRRBGBBGRBGRGGRGBRGRBBGRBBGBRR+
+BGGRBRBRRGGGRBRGBRGGRRBGGRBRGG+
+BRBGRGRGBBRGGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+RBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBBBGBGRBBRRGGBRBGGGRBGRBR+
+BGRBBBBBGRBGRBGBRRRRRBRRBBBRGG+
+RBBGRGGRBGRBRRBRGBRBGGRBGGRGBB+
+GRRBGBBBBRRRBGBRGBRRBBGRRBGBRR+
+BBGRBRBRGGBRRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGBGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGGGRBGRBGRGBBBBBGBBGGGBRR+
+BGGRBRRBGRBGBBGBRGBGRRBGRRBRGG+
+RBBGRGGBGBBBGRGBRGBBGGRBBGRGBB+
+GGRBGBBBRRGBBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+RBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+GRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRGRBRBGRRGGBBRGRBBBGRBGRG+
+RBGRRRRRBGRBGRBRGGGGGRGGRRRGBB+
+GRRBGBBGRBGRGGRGBRGRBBGRBBGBRR+
+BGGRBRRGRGGGRBRGBRGGRRBGGRBRGG+
+RRBGRGGBBBRGGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+RBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBRBGBGRBBRRGGBRBGGGRBGRBR+
+BGRBBBBBGRBGRBGBRRRRRBRRBBBRGG+
+RBBGRGGRBGRBRRBRGBRBGGRBGGRGBB+
+GRRBGBBRBRRRBGBRGBRRBBGRRBGBRR+
+BBGRBRRGBGBRRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGBGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGGGRBGRBGRGBBBBBGBBGGGBRR+
+BGGRBRRBGRBGBBGBRGBGRRBGRRBRGG+
+RBBGRGGBBBBBGRGBRGBBGGRBBGRGBB+
+GGRBGBBRGRGBBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+RBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+GRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRGRBRBGRRGGBBRGRBBBGRBGRG+
+RBGRRRRRBGRBGRBRGGGGGRGGRRRGBB+
+GRRBGBBGRBGRGGRGBRGRBBGRBBGBRR+
+BGGRBRRGGBGGRBRGBRGGRRBGGRBRGG+
+RRBGRGGBRBRGGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+RBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBRBGBGRBBRRGGBRBGGGRBGRBR+
+BGRBBBBBGRBGRBGBRRRRRBRRBBBRGG+
+RBBGRGGRBGRBRRBRGBRBGGRBGGRGBB+
+GRRBGBBRRGRRBGBRGBRRBBGRRBGBRR+
+BBGRBRRGBBBRRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGBGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGGGRBGRBGRGBBBBBGBBGGGBRR+
+BGGRBRRBGRBGBBGBRGBGRRBGRRBRGG+
+RBBGRGGBBRBBGRGBRGBBGGRBBGRGBB+
+GGRBGBBRGGBBBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+BGBBGRBGBRBGBRGBRRBRGGRGBRGGRG+
+GRGGRRBRGBRRRRBBGBGBRRBRGBRGBR+
+RBRRBBGRBGRBRGRGGBRGBRGGBRRGBG+
+GGRBGRGGBGGGRBRBRGGGRGBRGBBRGG+
+BBGRBGGGRRGRGRGRGBBBGGRGBBGGBR+
+RBGRBBRGRBGBBGGGBBGRBRGRBGRRGB+
+GRBGGRRBGBRGBBRGRRBGRGBRBGBBBB+
+RBGRBRGRBRBGRRGGBBRGRBBBGRBGRG+
+RBGRRRRRBGRBGRBRGGGGGRGGRRRGBB+
+GRRBGBBGRBGRGGRGBRGRBBGRBBGBRR+
+BGGRBRRGGBBGRBRGBRGGRRBGGRBRGG+
+RRBGRGGBRRGBGRGGRGGRBGRBBRRGBB+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+GRGGRBGRGBGRGBRGBBGBRRBRGBRRBR+
+RBRRBBGBRGBBBBGGRGRGBBGBRGBRGB+
+BGBBGGRBGRBGBRBRRGBRGBRRGBBRGR+
+RRBGRBRRGRRRBGBGBRRRBRGBRGGBRR+
+GGRBGRRRBBRBRBRBRGGGRRBRGGRRGB+
+BGRBGGBRBGRGGRRRGGRBGBRBGRBBRG+
+RBGRRBBGRGBRGGBRBBGRBRGBGRGGGG+
+BGRBGBRBGBGRBBRRGGBRBGGGRBGRBR+
+BGRBBBBBGRBGRBGBRRRRRBRRBBBRGG+
+RBBGRGGRBGRBRRBRGBRBGGRBGGRGBB+
+GRRBGBBRRGGRBGBRGBRRBBGRRBGBRR+
+BBGRBRRGBBRGRBRRBRRBGRBGGBBRGG+
++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++
+RBRRBGRBRGRBRGBRGGRGBBGBRGBBGB+
+BGBBGGRGBRGGGGRRBRBRGGRGBRGBRG+
+GRGGRRBGRBGRGBGBBRGBRGBBRGGBRB+
+BBGRBGBBRBBBGRGRGBBBGBRGBRRGBB+
+RRBGRBBBGGBGBGBGBRRRBBGBRRBBRG+
+GRBGRRGBGRBRRBBBRRBGRGBGRBGGBR+
+BGRBBGGRBRGBRRGBGGRBGBRGRBRRRR+
+GRBGRGBGRGRBGGBBRRGBGRRRBGRBGB+
+GRBGGGGGRBGRBGRGBBBBBGBBGGGBRR+
+BGGRBRRBGRBGBBGBRGBGRRBGRRBRGG+
+RBBGRGGBBRRBGRGBRGBBGGRBBGRGBB+
+GGRBGBBRGGBRBGBBGBBGRBGRRGGBRR+
++++++++++++++++++++++++++++++++

cycle of length 3