from itertools import permutations, product
def implication(a, b):
return not a or b
def f1(x, y, z, w):
return int(implication(w, y) == implication(z, x))
def f2(x, y, z, w):
return int(implication(w, y) and (not x) == z)
# строки фрагмента: 4 столбца, F1, F2 ('?' - пусто)
rows = [
(0, '?', 0, 0, 0, 1),
(0, 0, 0, '?', 0, '?'),
(0, 1, 1, '?', '?', 0),
]
for p in permutations('xyzw'): # p[i] - переменная в (i+1)-м столбце
ok = True
for row in rows:
found = False
for x, y, z, w in product((0, 1), repeat=4):
d = {'x': x, 'y': y, 'z': z, 'w': w}
vals = [d[c] for c in p] + [f1(x, y, z, w), f2(x, y, z, w)]
good = True
for r, v in zip(row, vals):
if r != '?' and r != v:
good = False
if good:
found = True
if not found:
ok = False
if ok:
print(''.join(p))
ZnJvbSBpdGVydG9vbHMgaW1wb3J0IHBlcm11dGF0aW9ucywgcHJvZHVjdAoKZGVmIGltcGxpY2F0aW9uKGEsIGIpOgogICAgcmV0dXJuIG5vdCBhIG9yIGIKCmRlZiBmMSh4LCB5LCB6LCB3KToKICAgIHJldHVybiBpbnQoaW1wbGljYXRpb24odywgeSkgPT0gaW1wbGljYXRpb24oeiwgeCkpCgpkZWYgZjIoeCwgeSwgeiwgdyk6CiAgICByZXR1cm4gaW50KGltcGxpY2F0aW9uKHcsIHkpIGFuZCAobm90IHgpID09IHopCgojINGB0YLRgNC+0LrQuCDRhNGA0LDQs9C80LXQvdGC0LA6IDQg0YHRgtC+0LvQsdGG0LAsIEYxLCBGMiAoJz8nIC0g0L/Rg9GB0YLQvikKcm93cyA9IFsKICAgICgwLCAnPycsIDAsIDAsIDAsIDEpLAogICAgKDAsIDAsIDAsICc/JywgMCwgJz8nKSwKICAgICgwLCAxLCAxLCAnPycsICc/JywgMCksCl0KCmZvciBwIGluIHBlcm11dGF0aW9ucygneHl6dycpOiAgICAgICAgICAjIHBbaV0gLSDQv9C10YDQtdC80LXQvdC90LDRjyDQsiAoaSsxKS3QvCDRgdGC0L7Qu9Cx0YbQtQogICAgb2sgPSBUcnVlCiAgICBmb3Igcm93IGluIHJvd3M6CiAgICAgICAgZm91bmQgPSBGYWxzZQogICAgICAgIGZvciB4LCB5LCB6LCB3IGluIHByb2R1Y3QoKDAsIDEpLCByZXBlYXQ9NCk6CiAgICAgICAgICAgIGQgPSB7J3gnOiB4LCAneSc6IHksICd6JzogeiwgJ3cnOiB3fQogICAgICAgICAgICB2YWxzID0gW2RbY10gZm9yIGMgaW4gcF0gKyBbZjEoeCwgeSwgeiwgdyksIGYyKHgsIHksIHosIHcpXQogICAgICAgICAgICBnb29kID0gVHJ1ZQogICAgICAgICAgICBmb3IgciwgdiBpbiB6aXAocm93LCB2YWxzKToKICAgICAgICAgICAgICAgIGlmIHIgIT0gJz8nIGFuZCByICE9IHY6CiAgICAgICAgICAgICAgICAgICAgZ29vZCA9IEZhbHNlCiAgICAgICAgICAgIGlmIGdvb2Q6CiAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKICAgICAgICBpZiBub3QgZm91bmQ6CiAgICAgICAgICAgIG9rID0gRmFsc2UKICAgIGlmIG9rOgogICAgICAgIHByaW50KCcnLmpvaW4ocCkp