fork download
  1. =begin
  2.  
  3. お題
  4. XORゲートは4つのNANDゲートで構成できることが知られている
  5. この構成方法をプログラムで探索せよ
  6.  
  7. i番目のNANDゲートの入力を(ai,bi)、出力をciとする
  8. XORゲートの入力を(X,Y)、出力をZとする
  9.  
  10. 出力例
  11. X->a1
  12. Y->b1
  13. X->a2
  14. c1->b2
  15. Y->a3
  16. c1->b3
  17. c2->a4
  18. c3->b4
  19. c4->Z
  20.  
  21. =end
  22.  
  23. # 自由度は入力の接続先。出力のどれかと必ず接続する。
  24. # 入力同士は接続できる (同じ出力に接続できる)
  25. # 出力同士は接続できない
  26. # どこにもつながらない出力は無いはず
  27. # 出力 X,Y, c1,c2,c3,c4 0..5
  28. # 入力 a1,b1, a2,b2, a3,b3, a4,b4 0..7
  29. # (c1..4) -> Z
  30.  
  31.  
  32. $ans = 0
  33. ab = [ 0,0, 0,0, 0,0, 0,0 ]
  34.  
  35. def print_map( ab, z )
  36. tbl = %w{ X Y c1 c2 c3 c4 }
  37. chAB = %w{ a b }
  38. ab.each_with_index{|n,i|
  39. m, a = i.divmod(2)
  40. puts " %3s -> %s%d" % [ tbl[n], chAB[a], m+1 ]
  41. # print "#{tbl[n]} "
  42. }
  43. puts " c#{z+1} -> Z"
  44. $ans += 1
  45. end
  46.  
  47.  
  48. def check( ab )
  49. return false unless ab.index(0) && ab.index(1) # X,Y 入力を使わない物は枝刈り
  50. cnum = [0,0,0,0] # 出力ビットテーブル f(x,y) -> c_
  51. 2.times{|x|
  52. 2.times{|y|
  53. lg = [ nil,nil, nil,nil, nil,nil, nil,nil ] # 入力値 [a_,b_] * 4
  54. c = [ nil, nil, nil, nil ] # 出力値 c1..c4
  55. ab.each_with_index{|n,i|
  56. case n
  57. when 0; lg[i] = x
  58. when 1; lg[i] = y
  59. end
  60. }
  61. 4.times{ # ロジック最大段数 (3で良いはず)
  62. 4.times{|cn|
  63. next if c[cn]
  64. if lg[2*cn] && lg[2*cn+1]
  65. c[cn] = (lg[2*cn] & lg[2*cn+1]) ^ 1 # nand
  66. ab.each_with_index{|n,i|
  67. case n
  68. when 2; lg[i] = c[0]
  69. when 3; lg[i] = c[1]
  70. when 4; lg[i] = c[2]
  71. when 5; lg[i] = c[3]
  72. end
  73. }
  74. end
  75. }
  76. }
  77. c.size.times{|n|
  78. if c[n] && cnum[n]
  79. cnum[n] = (cnum[n] << 1) | c[n]
  80. else
  81. cnum[n] = nil
  82. end
  83. }
  84. }
  85. }
  86. cnum.each_with_index{|n,i|
  87. next unless n == 0b0110 # xor パターン検索
  88. if ab.index( i + 2 )
  89. warn "Loop" # 出力がループしている
  90. next
  91. end
  92. print_map( ab, i )
  93. puts
  94. }
  95. end
  96.  
  97.  
  98. def solve( ab, n = 0 )
  99. return if n > 7
  100. solve( ab, n + 1 )
  101. check( ab ) if n == 7
  102. ab[n] += 1
  103. ab[n] += 1 if n >> 1 == ab[n] - 2 # 出力は入力につなげない (一段のループだけチェック)
  104. if ab[n] > 5
  105. ab[n] = 0
  106. return
  107. end
  108. solve( ab, n )
  109. end
  110.  
  111. #####################################################################
  112.  
  113. solve( ab )
  114. puts "Done. #{$ans}"
  115.  
Time limit exceeded #stdin #stdout 5s 6328KB
stdin
Standard input is empty
stdout
   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
   Y -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
   Y -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c1 -> a3
   Y -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c1 -> a3
   Y -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   X -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
   X -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
   X -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c1 -> a3
   X -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c1 -> a3
   X -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
   Y -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
   Y -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
   Y -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c1 -> a3
   Y -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c1 -> a3
   Y -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c2 -> a3
  c4 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c4 -> a3
  c2 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   X -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
   X -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
   X -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c1 -> a3
   X -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c1 -> a3
   X -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c2 -> a3
  c4 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c4 -> a3
  c2 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c1 -> a2
   Y -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
   X -> a3
  c1 -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
   X -> a3
  c1 -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
   Y -> a3
  c1 -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
   Y -> a3
  c1 -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   X -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   X -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   Y -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   Y -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
   X -> a3
  c1 -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
   X -> a3
  c1 -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
   Y -> a3
  c1 -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
   Y -> a3
  c1 -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   X -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   X -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   Y -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   X -> a1
   Y -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   Y -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
   Y -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
   Y -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   Y -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   Y -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
   Y -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
   Y -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   Y -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   Y -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

   X -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c3 -> b1
   Y -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
   Y -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
   Y -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
   Y -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   X -> a3
   Y -> b3
   Y -> a4
  c3 -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   Y -> a3
   X -> b3
   Y -> a4
  c3 -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c3 -> a2
   Y -> b2
   X -> a3
   Y -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
  c3 -> a2
   Y -> b2
   X -> a3
   Y -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
  c3 -> a2
   Y -> b2
   Y -> a3
   X -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
  c3 -> a2
   Y -> b2
   Y -> a3
   X -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   X -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   X -> a3
   Y -> b3
   Y -> a4
  c3 -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   Y -> a3
   X -> b3
   Y -> a4
  c3 -> b4
  c2 -> Z

   X -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
   Y -> a2
  c4 -> b2
  c1 -> a3
  c2 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
   Y -> a2
  c4 -> b2
  c1 -> a3
  c2 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
   Y -> a2
  c4 -> b2
  c2 -> a3
  c1 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
   Y -> a2
  c4 -> b2
  c2 -> a3
  c1 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
   Y -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
   Y -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
  c4 -> a3
   Y -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
  c4 -> a3
   Y -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
   Y -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
   Y -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
  c4 -> a3
   Y -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
  c4 -> a3
   Y -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   X -> a1
  c4 -> b1
  c4 -> a2
   Y -> b2
  c1 -> a3
  c2 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
  c4 -> a2
   Y -> b2
  c1 -> a3
  c2 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
  c4 -> a2
   Y -> b2
  c2 -> a3
  c1 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   X -> a1
  c4 -> b1
  c4 -> a2
   Y -> b2
  c2 -> a3
  c1 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
   Y -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
   Y -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c1 -> a3
   Y -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c1 -> a3
   Y -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   X -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
   X -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
   X -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c1 -> a3
   X -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c1 -> a3
   X -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
   Y -> a2
  c1 -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
   Y -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
   Y -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c1 -> a3
   Y -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c1 -> a3
   Y -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c2 -> a3
  c4 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c4 -> a3
  c2 -> b3
   Y -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   X -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
   X -> a3
  c1 -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
   X -> a3
  c1 -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c1 -> a3
   X -> b3
  c2 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c1 -> a3
   X -> b3
  c3 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c2 -> a3
  c4 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c2 -> a3
  c4 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c4 -> a3
  c2 -> b3
   X -> a4
  c1 -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c1 -> a2
   Y -> b2
  c4 -> a3
  c2 -> b3
  c1 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
   X -> a3
  c1 -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
   X -> a3
  c1 -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
   Y -> a3
  c1 -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
   Y -> a3
  c1 -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   X -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   X -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   Y -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c3 -> a2
  c4 -> b2
  c1 -> a3
   Y -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
   X -> a3
  c1 -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
   X -> a3
  c1 -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
   Y -> a3
  c1 -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
   Y -> a3
  c1 -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   X -> b3
   Y -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   X -> b3
  c1 -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   Y -> b3
   X -> a4
  c1 -> b4
  c2 -> Z

   Y -> a1
   X -> b1
  c4 -> a2
  c3 -> b2
  c1 -> a3
   Y -> b3
  c1 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
   X -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
   X -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   X -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   X -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
   X -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
   X -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   X -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   X -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

   Y -> a1
  c2 -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c3 -> b1
   X -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
   X -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
   X -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
   X -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   X -> a3
   Y -> b3
   X -> a4
  c3 -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   Y -> a3
   X -> b3
   X -> a4
  c3 -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c1 -> a2
  c4 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c3 -> a2
   X -> b2
   X -> a3
   Y -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
  c3 -> a2
   X -> b2
   X -> a3
   Y -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
  c3 -> a2
   X -> b2
   Y -> a3
   X -> b3
  c1 -> a4
  c2 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
  c3 -> a2
   X -> b2
   Y -> a3
   X -> b3
  c2 -> a4
  c1 -> b4
  c4 -> Z

   Y -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   X -> a3
   Y -> b3
   X -> a4
  c3 -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   Y -> a3
   X -> b3
   X -> a4
  c3 -> b4
  c2 -> Z

   Y -> a1
  c3 -> b1
  c4 -> a2
  c1 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
   X -> a2
  c4 -> b2
  c1 -> a3
  c2 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
   X -> a2
  c4 -> b2
  c1 -> a3
  c2 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
   X -> a2
  c4 -> b2
  c2 -> a3
  c1 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
   X -> a2
  c4 -> b2
  c2 -> a3
  c1 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
   X -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
   X -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
  c4 -> a3
   X -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c1 -> a2
  c3 -> b2
  c4 -> a3
   X -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
   X -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
   X -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
  c4 -> a3
   X -> b3
   X -> a4
   Y -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c3 -> a2
  c1 -> b2
  c4 -> a3
   X -> b3
   Y -> a4
   X -> b4
  c2 -> Z

   Y -> a1
  c4 -> b1
  c4 -> a2
   X -> b2
  c1 -> a3
  c2 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
  c4 -> a2
   X -> b2
  c1 -> a3
  c2 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
  c4 -> a2
   X -> b2
  c2 -> a3
  c1 -> b3
   X -> a4
   Y -> b4
  c3 -> Z

   Y -> a1
  c4 -> b1
  c4 -> a2
   X -> b2
  c2 -> a3
  c1 -> b3
   Y -> a4
   X -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
   Y -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
   Y -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   Y -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   Y -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
   Y -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
   Y -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   Y -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   Y -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
   Y -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   X -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   Y -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
   X -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
   X -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   X -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c2 -> a3
   X -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   X -> a2
   Y -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
   X -> a3
  c2 -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
   X -> a3
  c2 -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c1 -> a3
  c4 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   X -> b3
  c1 -> a4
  c3 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c2 -> a3
   X -> b3
  c3 -> a4
  c1 -> b4
  c4 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
   X -> a4
  c2 -> b4
  c3 -> Z

  c2 -> a1
   Y -> b1
   Y -> a2
   X -> b2
  c4 -> a3
  c1 -> b3
  c2 -> a4
   X -> b4
  c3 -> Z

  c2 -> a1
  c3 -> b1
   X -> a2
  c4 -> b2
   Y -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   X -> a2
  c4 -> b2
   Y -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   X -> a2
  c4 -> b2
  c4 -> a3
   Y -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   X -> a2
  c4 -> b2
  c4 -> a3
   Y -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   Y -> a2
  c4 -> b2
   X -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   Y -> a2
  c4 -> b2
   X -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   Y -> a2
  c4 -> b2
  c4 -> a3
   X -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
   Y -> a2
  c4 -> b2
  c4 -> a3
   X -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   X -> b2
   Y -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   X -> b2
   Y -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   X -> b2
  c4 -> a3
   Y -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   X -> b2
  c4 -> a3
   Y -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   Y -> b2
   X -> a3
  c4 -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   Y -> b2
   X -> a3
  c4 -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   Y -> b2
  c4 -> a3
   X -> b3
   X -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c3 -> b1
  c4 -> a2
   Y -> b2
  c4 -> a3
   X -> b3
   Y -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   X -> a2
  c3 -> b2
   X -> a3
   Y -> b3
   Y -> a4
  c3 -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   X -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   X -> a2
  c3 -> b2
   Y -> a3
   X -> b3
   Y -> a4
  c3 -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   X -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   Y -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   Y -> a2
  c3 -> b2
   X -> a3
   Y -> b3
   X -> a4
  c3 -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   Y -> a2
  c3 -> b2
   X -> a3
   Y -> b3
  c3 -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   Y -> a2
  c3 -> b2
   Y -> a3
   X -> b3
   X -> a4
  c3 -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
   Y -> a2
  c3 -> b2
   Y -> a3
   X -> b3
  c3 -> a4
   X -> b4
  c1 -> Z

  c2 -> a1
  c4 -> b1
  c3 -> a2