=begin お題 XORゲートは4つのNANDゲートで構成できることが知られている この構成方法をプログラムで探索せよ i番目のNANDゲートの入力を(ai,bi)、出力をciとする XORゲートの入力を(X,Y)、出力をZとする 出力例 X->a1 Y->b1 X->a2 c1->b2 Y->a3 c1->b3 c2->a4 c3->b4 c4->Z =end # 自由度は入力の接続先。出力のどれかと必ず接続する。 # 入力同士は接続できる (同じ出力に接続できる) # 出力同士は接続できない # どこにもつながらない出力は無いはず # 出力 X,Y, c1,c2,c3,c4 0..5 # 入力 a1,b1, a2,b2, a3,b3, a4,b4 0..7 # (c1..4) -> Z $ans = 0 ab = [ 0,0, 0,0, 0,0, 0,0 ] def print_map( ab, z ) tbl = %w{ X Y c1 c2 c3 c4 } chAB = %w{ a b } ab.each_with_index{|n,i| m, a = i.divmod(2) puts " %3s -> %s%d" % [ tbl[n], chAB[a], m+1 ] # print "#{tbl[n]} " } puts " c#{z+1} -> Z" $ans += 1 end def check( ab ) return false unless ab.index(0) && ab.index(1) # X,Y 入力を使わない物は枝刈り cnum = [0,0,0,0] # 出力ビットテーブル f(x,y) -> c_ 2.times{|x| 2.times{|y| lg = [ nil,nil, nil,nil, nil,nil, nil,nil ] # 入力値 [a_,b_] * 4 c = [ nil, nil, nil, nil ] # 出力値 c1..c4 ab.each_with_index{|n,i| case n when 0; lg[i] = x when 1; lg[i] = y end } 4.times{ # ロジック最大段数 (3で良いはず) 4.times{|cn| next if c[cn] if lg[2*cn] && lg[2*cn+1] c[cn] = (lg[2*cn] & lg[2*cn+1]) ^ 1 # nand ab.each_with_index{|n,i| case n when 2; lg[i] = c[0] when 3; lg[i] = c[1] when 4; lg[i] = c[2] when 5; lg[i] = c[3] end } end } } c.size.times{|n| if c[n] && cnum[n] cnum[n] = (cnum[n] << 1) | c[n] else cnum[n] = nil end } } } cnum.each_with_index{|n,i| next unless n == 0b0110 # xor パターン検索 if ab.index( i + 2 ) warn "Loop" # 出力がループしている next end print_map( ab, i ) puts } end def solve( ab, n = 0 ) return if n > 7 solve( ab, n + 1 ) check( ab ) if n == 7 ab[n] += 1 ab[n] += 1 if n >> 1 == ab[n] - 2 # 出力は入力につなげない (一段のループだけチェック) if ab[n] > 5 ab[n] = 0 return end solve( ab, n ) end ##################################################################### solve( ab ) puts "Done. #{$ans}"
Standard input is empty
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