{"abstract":"Ragdoll parts in the same positive group ignore each other when masks disagree.","category":"Collision detection broadphase","checks":8,"contract":"solve(fixtures, candidates): fixture [id, body, category bits, mask bits, group, sensor, body type]. A candidate [a,b] is accepted unless: same body; neither body is dynamic; both are sensors. Group rule: equal nonzero groups override masks (positive always collide, negative never); otherwise require (catA & maskB) and (catB & maskA). Return sorted unique [min,max] accepted pairs.","evaluation_group":"w2-collision_detection_broadphase-fixture-pair-filter","failed_approach":"Letting groups only add collisions breaks negative-group suppression.","family":"w2-collision_detection_broadphase-fixture-pair-filter-group-override-precedence","id":"FA-87511","implementations":{"attempt":{"sha256":"da6870b48e6499ad8457b91187ee3b458bf08c790bb5b11f0931063f85e9a6c8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(fixtures, candidates):\n    fx = {f[0]: f for f in fixtures}\n    out = set()\n    for a, b in candidates:\n        fa, fb = fx[a], fx[b]\n        if fa[1] == fb[1]:\n            continue\n        if fa[6] != 'dynamic' and fb[6] != 'dynamic':\n            continue\n        ga, gb = fa[4], fb[4]\n        ok = ((fa[2] & fb[3]) != 0 and (fb[2] & fa[3]) != 0) or (ga == gb and ga > 0)\n        if not ok:\n            continue\n        if fa[5] and fb[5]:\n            continue\n        out.add((min(a, b), max(a, b)))\n    return [list(p) for p in sorted(out)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[1, 2, 8, 3, 0, False, 'static'], [2, 2, 4, 3, 0, True, 'dynamic'], [3, 3, 2, 15, 1, False, 'kinematic'], [4, 2, 4, 12, 1, False, 'dynamic'], [5, 3, 2, 6, 2, False, 'static']], [[1, 3], [3, 1], [3, 1], [4, 3], [3, 1], [3, 4]]], [[3, 4]]], [[[[1, 1, 1, 6, -1, False, 'kinematic'], [2, 4, 4, 6, -2, True, 'dynamic']], [[2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [1, 2]]], []], [[[[1, 3, 2, 1, 2, False, 'static'], [2, 1, 4, 15, 2, False, 'dynamic']], [[2, 1], [2, 1], [1, 2], [1, 2], [2, 1], [2, 1]]], [[1, 2]]], [[[[1, 4, 8, 6, 1, False, 'static'], [2, 2, 1, 3, 0, False, 'dynamic'], [3, 4, 8, 3, 1, False, 'static'], [4, 1, 8, 12, 1, False, 'static'], [5, 2, 2, 15, 0, False, 'kinematic']], [[3, 5], [4, 2], [5, 3], [5, 4]]], []], [[[[1, 4, 2, 15, -2, False, 'dynamic'], [2, 1, 1, 12, 0, False, 'static'], [3, 1, 1, 6, -2, False, 'dynamic']], [[1, 3], [1, 2], [1, 2], [1, 2], [2, 1]]], []], [[[[1, 3, 4, 7, -1, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic'], [3, 2, 4, 15, 1, False, 'static'], [4, 1, 2, 12, -1, True, 'static'], [5, 3, 1, 6, 0, False, 'static'], [6, 1, 4, 12, 2, False, 'dynamic']], [[3, 5], [6, 5], [5, 1], [2, 4], [4, 3], [4, 1], [4, 1], [2, 5], [6, 3]]], [[2, 5], [3, 6]]], [[[[1, 3, 2, 12, 2, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 3, 8, 12, 2, False, 'static'], [2, 1, 1, 12, -1, False, 'dynamic'], [3, 3, 1, 15, 1, False, 'kinematic'], [4, 4, 4, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [1, 4]]], [[1, 4]]]], [[[[[1, 1, 2, 12, 1, False, 'kinematic'], [2, 4, 4, 15, 0, False, 'dynamic']], [[1, 2], [2, 1], [1, 2], [1, 2], [1, 2]]], [[1, 2]]], [[[[1, 2, 4, 12, 1, False, 'kinematic'], [2, 4, 1, 1, 1, False, 'dynamic'], [3, 1, 1, 6, -2, True, 'static'], [4, 4, 2, 7, 2, False, 'dynamic'], [5, 2, 1, 15, 1, True, 'dynamic'], [6, 4, 1, 12, 1, True, 'dynamic'], [7, 1, 1, 1, 0, False, 'dynamic']], [[1, 7], [1, 6], [5, 6], [5, 6], [6, 2], [5, 2], [6, 7], [5, 3], [1, 7]]], [[1, 6], [2, 5]]], [[[[1, 3, 8, 1, 0, False, 'dynamic'], [2, 2, 1, 15, -2, False, 'static'], [3, 3, 2, 1, -2, False, 'dynamic']], [[2, 3], [2, 3], [1, 3], [1, 2]]], [[1, 2]]], [[[[1, 3, 8, 6, 1, False, 'dynamic'], [2, 2, 8, 3, 1, False, 'dynamic'], [3, 1, 1, 3, 2, False, 'dynamic'], [4, 3, 2, 3, 1, False, 'static'], [5, 2, 8, 3, 2, False, 'dynamic']], [[5, 2], [4, 5], [1, 2], [2, 1], [1, 5], [3, 1], [4, 5], [4, 3], [3, 4]]], [[1, 2], [3, 4]]], [[[[1, 2, 2, 15, -2, False, 'dynamic'], [2, 2, 4, 1, -1, False, 'dynamic'], [3, 2, 2, 1, -2, True, 'dynamic'], [4, 3, 4, 15, -2, False, 'kinematic'], [5, 3, 8, 6, -1, False, 'dynamic']], [[1, 4], [3, 2], [2, 1], [2, 1], [2, 4], [1, 3], [3, 5], [1, 3], [4, 2], [2, 1]]], []], [[[[1, 1, 2, 3, 2, False, 'dynamic'], [2, 4, 2, 12, 1, False, 'kinematic'], [3, 2, 4, 6, -1, False, 'dynamic'], [4, 4, 8, 7, -1, True, 'dynamic'], [5, 2, 2, 3, 2, False, 'dynamic']], [[5, 2], [4, 3], [2, 5]]], []], [[[[1, 1, 2, 12, -1, False, 'dynamic'], [2, 2, 2, 3, -2, False, 'dynamic'], [3, 2, 2, 12, -2, False, 'static'], [4, 4, 4, 12, -1, False, 'static'], [5, 4, 1, 7, 1, False, 'kinematic']], [[5, 3], [4, 3], [1, 5]]], []], [[[[1, 3, 4, 12, -2, False, 'dynamic'], [2, 1, 2, 6, 2, True, 'kinematic'], [3, 2, 8, 12, 2, True, 'kinematic'], [4, 4, 2, 1, -2, False, 'kinematic'], [5, 4, 8, 15, 2, False, 'kinematic'], [6, 2, 4, 7, 2, False, 'dynamic'], [7, 1, 1, 15, 2, False, 'static']], [[6, 5], [4, 1], [2, 4], [5, 1], [4, 3], [4, 5], [2, 6], [2, 4], [4, 7], [2, 3]]], [[1, 5], [2, 6], [5, 6]]]], [[[[[1, 3, 8, 15, -2, False, 'kinematic'], [2, 3, 2, 7, -2, False, 'kinematic'], [3, 3, 2, 15, 2, True, 'static'], [4, 2, 2, 3, -2, False, 'dynamic'], [5, 1, 1, 6, -1, False, 'dynamic'], [6, 4, 2, 3, 0, False, 'static']], [[2, 4], [6, 5], [5, 6]]], [[5, 6]]], [[[[1, 4, 4, 7, 0, False, 'kinematic'], [2, 4, 2, 7, -2, False, 'dynamic'], [3, 3, 8, 15, 1, False, 'dynamic'], [4, 4, 1, 3, -2, False, 'static'], [5, 4, 1, 15, 0, False, 'static'], [6, 4, 1, 12, 0, False, 'dynamic'], [7, 2, 2, 6, -1, False, 'dynamic'], [8, 4, 4, 1, 2, False, 'dynamic']], [[2, 5], [2, 1], [6, 8], [1, 5], [4, 7]]], []], [[[[1, 1, 1, 15, -1, True, 'dynamic'], [2, 1, 1, 15, 2, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 4, 2, 12, 0, False, 'dynamic']], [[3, 4], [4, 3], [1, 3], [1, 2], [2, 4], [4, 1]]], [[1, 3]]], [[[[1, 2, 4, 6, -2, False, 'static'], [2, 2, 4, 15, 0, False, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 4, 1, 1, 2, False, 'dynamic'], [2, 4, 4, 1, 0, False, 'dynamic'], [3, 2, 2, 7, 2, False, 'static'], [4, 3, 2, 7, 2, False, 'static']], [[3, 2], [3, 1], [4, 2], [2, 4], [1, 4], [2, 1], [4, 2], [4, 3], [2, 4], [4, 2]]], [[1, 3], [1, 4]]], [[[[1, 3, 1, 7, -1, False, 'dynamic'], [2, 3, 1, 7, -1, False, 'dynamic'], [3, 3, 1, 6, -1, False, 'static'], [4, 1, 8, 6, 2, False, 'static'], [5, 3, 2, 12, -1, False, 'dynamic'], [6, 1, 8, 15, -1, False, 'static'], [7, 4, 2, 1, 1, True, 'dynamic']], [[4, 2], [6, 5], [3, 6], [5, 7], [2, 7], [5, 6], [1, 4], [6, 2], [6, 2], [6, 4]]], [[2, 7]]], [[[[1, 4, 1, 1, 1, False, 'static'], [2, 4, 1, 15, 2, False, 'static'], [3, 3, 2, 15, 1, False, 'dynamic'], [4, 2, 4, 6, -2, True, 'kinematic'], [5, 1, 2, 1, -1, True, 'dynamic'], [6, 1, 8, 12, 2, False, 'dynamic'], [7, 2, 1, 7, 1, False, 'dynamic'], [8, 3, 2, 1, 0, False, 'dynamic']], [[5, 3], [2, 6], [8, 7], [1, 2]]], [[2, 6], [7, 8]]], [[[[1, 4, 4, 1, 2, False, 'dynamic'], [2, 1, 2, 12, -1, False, 'kinematic'], [3, 3, 1, 12, 2, False, 'static'], [4, 1, 1, 15, 0, False, 'kinematic'], [5, 3, 1, 6, -2, False, 'static'], [6, 2, 2, 6, 2, False, 'kinematic']], [[1, 2], [3, 5], [3, 4], [2, 6], [1, 6], [4, 3], [5, 2], [1, 2]]], [[1, 6]]]], [[[[[1, 3, 1, 15, 1, False, 'dynamic'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 4, 8, 15, 0, False, 'dynamic'], [4, 4, 8, 1, 2, True, 'dynamic'], [5, 2, 4, 1, 0, False, 'dynamic'], [6, 3, 2, 15, -1, False, 'kinematic'], [7, 2, 1, 6, 1, True, 'kinematic'], [8, 3, 2, 3, 1, True, 'kinematic']], [[1, 7], [2, 5], [3, 4]]], [[1, 7]]], [[[[1, 1, 8, 6, 2, False, 'dynamic'], [2, 3, 4, 6, 1, False, 'kinematic'], [3, 3, 1, 15, -1, False, 'static'], [4, 4, 1, 12, 0, True, 'kinematic'], [5, 1, 4, 15, 0, False, 'dynamic'], [6, 3, 2, 7, 1, True, 'dynamic'], [7, 2, 1, 15, 0, False, 'static'], [8, 3, 8, 15, 2, False, 'dynamic']], [[7, 8], [1, 2], [2, 1], [5, 1], [3, 8], [5, 7], [7, 3]]], [[5, 7], [7, 8]]], [[[[1, 4, 1, 7, 0, False, 'dynamic'], [2, 2, 4, 15, -2, False, 'kinematic'], [3, 3, 8, 6, 2, False, 'dynamic'], [4, 1, 1, 12, 0, False, 'dynamic']], [[3, 2], [4, 3], [4, 1], [4, 2], [3, 4], [4, 1]]], [[2, 3], [2, 4]]], [[[[1, 4, 4, 15, -2, False, 'dynamic'], [2, 4, 1, 7, 1, False, 'kinematic'], [3, 1, 8, 7, -1, False, 'static'], [4, 3, 1, 15, 1, False, 'dynamic'], [5, 1, 8, 6, -1, False, 'dynamic'], [6, 1, 8, 1, -2, False, 'static']], [[4, 6], [6, 5], [5, 3], [3, 2], [2, 3]]], [[4, 6]]], [[[[1, 4, 1, 12, -2, False, 'dynamic'], [2, 4, 4, 12, -2, False, 'static'], [3, 2, 8, 7, -2, False, 'static']], [[3, 1], [3, 1], [1, 3], [2, 1], [2, 3], [3, 2], [3, 1], [2, 3], [3, 2]]], []], [[[[1, 3, 8, 15, 0, False, 'dynamic'], [2, 4, 2, 15, 1, False, 'dynamic'], [3, 4, 8, 15, 1, False, 'dynamic'], [4, 2, 4, 1, -2, False, 'dynamic'], [5, 4, 2, 15, -1, False, 'dynamic'], [6, 4, 8, 15, 1, False, 'static'], [7, 3, 1, 3, 1, False, 'dynamic']], [[1, 7], [2, 4], [7, 6], [5, 2], [7, 2]]], [[2, 7], [6, 7]]], [[[[1, 3, 4, 3, -2, True, 'dynamic'], [2, 1, 2, 6, 0, False, 'dynamic'], [3, 3, 2, 6, -2, False, 'dynamic'], [4, 3, 8, 15, 1, False, 'dynamic'], [5, 4, 4, 6, 1, False, 'kinematic'], [6, 4, 4, 15, -2, True, 'dynamic'], [7, 2, 8, 12, -2, False, 'dynamic'], [8, 2, 4, 15, 2, False, 'dynamic']], [[8, 6], [6, 7], [1, 4], [1, 8], [5, 1], [5, 2], [6, 8]]], [[2, 5], [6, 8]]], [[[[1, 1, 2, 7, 2, False, 'static'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 2, 4, 1, -2, True, 'dynamic'], [4, 2, 4, 7, -2, False, 'dynamic'], [5, 4, 4, 12, 2, False, 'static'], [6, 1, 2, 3, 1, False, 'dynamic']], [[4, 5], [2, 4], [2, 6], [5, 6], [4, 5], [6, 2], [2, 4], [4, 6], [1, 2], [6, 1]]], [[2, 6], [4, 5]]]], [[[[[1, 3, 1, 12, -2, False, 'static'], [2, 3, 8, 12, 1, False, 'dynamic'], [3, 4, 2, 15, 1, True, 'dynamic'], [4, 2, 4, 1, 1, True, 'kinematic'], [5, 3, 4, 6, -2, False, 'kinematic'], [6, 3, 4, 6, -2, False, 'kinematic'], [7, 1, 4, 7, -2, True, 'dynamic'], [8, 3, 2, 6, 2, False, 'dynamic'], [9, 4, 1, 7, 0, False, 'dynamic'], [10, 3, 2, 15, 0, False, 'dynamic']], [[7, 1], [2, 10], [7, 8], [5, 1], [1, 9], [5, 7]]], [[7, 8]]], [[[[1, 4, 2, 1, 0, False, 'dynamic'], [2, 1, 8, 15, 1, False, 'static'], [3, 3, 2, 3, 1, False, 'dynamic'], [4, 2, 2, 15, -2, False, 'dynamic'], [5, 2, 1, 6, 2, False, 'dynamic'], [6, 1, 4, 15, 1, True, 'static'], [7, 4, 4, 1, 1, False, 'kinematic'], [8, 2, 8, 7, 0, True, 'dynamic'], [9, 3, 4, 15, 0, False, 'kinematic']], [[8, 4], [9, 6], [1, 8], [8, 2], [3, 7], [1, 4], [8, 9], [4, 9], [4, 2], [2, 3]]], [[2, 3], [2, 4], [3, 7], [4, 9], [8, 9]]], [[[[1, 1, 1, 6, 2, False, 'kinematic'], [2, 3, 4, 15, 1, False, 'dynamic'], [3, 4, 4, 6, 2, False, 'kinematic'], [4, 1, 1, 6, -1, False, 'kinematic'], [5, 2, 4, 7, -1, True, 'dynamic'], [6, 2, 8, 12, 1, False, 'kinematic'], [7, 3, 8, 6, 0, False, 'static'], [8, 4, 4, 12, 2, False, 'static'], [9, 3, 2, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [9, 6], [5, 4]]], [[2, 3]]], [[[[1, 1, 2, 15, 0, True, 'dynamic'], [2, 2, 8, 15, 1, True, 'dynamic'], [3, 2, 2, 12, 1, False, 'kinematic'], [4, 1, 1, 15, 2, True, 'kinematic'], [5, 1, 8, 15, -1, False, 'kinematic']], [[5, 3], [1, 5], [4, 5], [3, 4], [4, 3]]], []], [[[[1, 2, 1, 15, 2, False, 'dynamic'], [2, 2, 8, 15, 0, False, 'kinematic'], [3, 4, 1, 3, 1, False, 'static'], [4, 2, 8, 3, 2, False, 'static'], [5, 2, 4, 3, 0, False, 'static'], [6, 1, 4, 6, -1, True, 'static'], [7, 1, 8, 6, -2, True, 'kinematic'], [8, 2, 2, 6, 0, False, 'dynamic'], [9, 4, 2, 7, 2, False, 'dynamic']], [[1, 2], [6, 3], [9, 5], [7, 6], [5, 3], [4, 9], [1, 5], [5, 7], [9, 7]]], [[4, 9], [5, 9]]], [[[[1, 2, 1, 12, -1, True, 'dynamic'], [2, 3, 8, 15, 0, False, 'dynamic'], [3, 1, 1, 1, -2, True, 'dynamic'], [4, 4, 8, 3, -2, False, 'kinematic'], [5, 4, 1, 6, -2, False, 'dynamic'], [6, 1, 8, 3, -2, False, 'dynamic'], [7, 2, 2, 12, -1, False, 'kinematic'], [8, 3, 1, 1, 2, True, 'dynamic']], [[8, 2], [6, 1], [7, 6], [5, 3], [6, 8], [6, 2], [3, 2], [7, 6]]], [[1, 6], [6, 7]]], [[[[1, 3, 2, 3, 0, False, 'static'], [2, 1, 1, 15, -1, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 1, 1, 3, -1, False, 'dynamic'], [5, 4, 8, 7, -2, False, 'kinematic'], [6, 4, 4, 12, 1, False, 'dynamic'], [7, 1, 2, 12, 2, False, 'dynamic'], [8, 2, 8, 12, 2, False, 'dynamic'], [9, 3, 4, 12, -1, False, 'static'], [10, 3, 4, 1, 1, False, 'static']], [[4, 9], [7, 6], [2, 9], [3, 10], [4, 8], [2, 1], [3, 10], [5, 10], [10, 6]]], [[1, 2], [6, 10]]], [[[[1, 1, 1, 3, 0, False, 'kinematic'], [2, 1, 1, 15, 1, False, 'static'], [3, 1, 8, 6, 0, False, 'kinematic'], [4, 3, 2, 7, 0, False, 'dynamic'], [5, 1, 1, 3, 0, False, 'kinematic'], [6, 2, 2, 1, 1, False, 'dynamic']], [[2, 6], [4, 5], [4, 5], [6, 5], [6, 1]]], [[1, 6], [2, 6], [4, 5], [5, 6]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"c6fc6015f6f79f7923a4b24c0cab85438abcc09b3d0edd785230ccb2f96dc7b9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(fixtures, candidates):\n    fx = {f[0]: f for f in fixtures}\n    out = set()\n    for a, b in candidates:\n        fa, fb = fx[a], fx[b]\n        if fa[1] == fb[1]:\n            continue\n        if fa[6] != 'dynamic' and fb[6] != 'dynamic':\n            continue\n        ga, gb = fa[4], fb[4]\n        ok = (fa[2] & fb[3]) != 0 and (fb[2] & fa[3]) != 0 and not (ga == gb and ga < 0)\n        if not ok:\n            continue\n        if fa[5] and fb[5]:\n            continue\n        out.add((min(a, b), max(a, b)))\n    return [list(p) for p in sorted(out)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[1, 2, 8, 3, 0, False, 'static'], [2, 2, 4, 3, 0, True, 'dynamic'], [3, 3, 2, 15, 1, False, 'kinematic'], [4, 2, 4, 12, 1, False, 'dynamic'], [5, 3, 2, 6, 2, False, 'static']], [[1, 3], [3, 1], [3, 1], [4, 3], [3, 1], [3, 4]]], [[3, 4]]], [[[[1, 1, 1, 6, -1, False, 'kinematic'], [2, 4, 4, 6, -2, True, 'dynamic']], [[2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [1, 2]]], []], [[[[1, 3, 2, 1, 2, False, 'static'], [2, 1, 4, 15, 2, False, 'dynamic']], [[2, 1], [2, 1], [1, 2], [1, 2], [2, 1], [2, 1]]], [[1, 2]]], [[[[1, 4, 8, 6, 1, False, 'static'], [2, 2, 1, 3, 0, False, 'dynamic'], [3, 4, 8, 3, 1, False, 'static'], [4, 1, 8, 12, 1, False, 'static'], [5, 2, 2, 15, 0, False, 'kinematic']], [[3, 5], [4, 2], [5, 3], [5, 4]]], []], [[[[1, 4, 2, 15, -2, False, 'dynamic'], [2, 1, 1, 12, 0, False, 'static'], [3, 1, 1, 6, -2, False, 'dynamic']], [[1, 3], [1, 2], [1, 2], [1, 2], [2, 1]]], []], [[[[1, 3, 4, 7, -1, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic'], [3, 2, 4, 15, 1, False, 'static'], [4, 1, 2, 12, -1, True, 'static'], [5, 3, 1, 6, 0, False, 'static'], [6, 1, 4, 12, 2, False, 'dynamic']], [[3, 5], [6, 5], [5, 1], [2, 4], [4, 3], [4, 1], [4, 1], [2, 5], [6, 3]]], [[2, 5], [3, 6]]], [[[[1, 3, 2, 12, 2, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 3, 8, 12, 2, False, 'static'], [2, 1, 1, 12, -1, False, 'dynamic'], [3, 3, 1, 15, 1, False, 'kinematic'], [4, 4, 4, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [1, 4]]], [[1, 4]]]], [[[[[1, 1, 2, 12, 1, False, 'kinematic'], [2, 4, 4, 15, 0, False, 'dynamic']], [[1, 2], [2, 1], [1, 2], [1, 2], [1, 2]]], [[1, 2]]], [[[[1, 2, 4, 12, 1, False, 'kinematic'], [2, 4, 1, 1, 1, False, 'dynamic'], [3, 1, 1, 6, -2, True, 'static'], [4, 4, 2, 7, 2, False, 'dynamic'], [5, 2, 1, 15, 1, True, 'dynamic'], [6, 4, 1, 12, 1, True, 'dynamic'], [7, 1, 1, 1, 0, False, 'dynamic']], [[1, 7], [1, 6], [5, 6], [5, 6], [6, 2], [5, 2], [6, 7], [5, 3], [1, 7]]], [[1, 6], [2, 5]]], [[[[1, 3, 8, 1, 0, False, 'dynamic'], [2, 2, 1, 15, -2, False, 'static'], [3, 3, 2, 1, -2, False, 'dynamic']], [[2, 3], [2, 3], [1, 3], [1, 2]]], [[1, 2]]], [[[[1, 3, 8, 6, 1, False, 'dynamic'], [2, 2, 8, 3, 1, False, 'dynamic'], [3, 1, 1, 3, 2, False, 'dynamic'], [4, 3, 2, 3, 1, False, 'static'], [5, 2, 8, 3, 2, False, 'dynamic']], [[5, 2], [4, 5], [1, 2], [2, 1], [1, 5], [3, 1], [4, 5], [4, 3], [3, 4]]], [[1, 2], [3, 4]]], [[[[1, 2, 2, 15, -2, False, 'dynamic'], [2, 2, 4, 1, -1, False, 'dynamic'], [3, 2, 2, 1, -2, True, 'dynamic'], [4, 3, 4, 15, -2, False, 'kinematic'], [5, 3, 8, 6, -1, False, 'dynamic']], [[1, 4], [3, 2], [2, 1], [2, 1], [2, 4], [1, 3], [3, 5], [1, 3], [4, 2], [2, 1]]], []], [[[[1, 1, 2, 3, 2, False, 'dynamic'], [2, 4, 2, 12, 1, False, 'kinematic'], [3, 2, 4, 6, -1, False, 'dynamic'], [4, 4, 8, 7, -1, True, 'dynamic'], [5, 2, 2, 3, 2, False, 'dynamic']], [[5, 2], [4, 3], [2, 5]]], []], [[[[1, 1, 2, 12, -1, False, 'dynamic'], [2, 2, 2, 3, -2, False, 'dynamic'], [3, 2, 2, 12, -2, False, 'static'], [4, 4, 4, 12, -1, False, 'static'], [5, 4, 1, 7, 1, False, 'kinematic']], [[5, 3], [4, 3], [1, 5]]], []], [[[[1, 3, 4, 12, -2, False, 'dynamic'], [2, 1, 2, 6, 2, True, 'kinematic'], [3, 2, 8, 12, 2, True, 'kinematic'], [4, 4, 2, 1, -2, False, 'kinematic'], [5, 4, 8, 15, 2, False, 'kinematic'], [6, 2, 4, 7, 2, False, 'dynamic'], [7, 1, 1, 15, 2, False, 'static']], [[6, 5], [4, 1], [2, 4], [5, 1], [4, 3], [4, 5], [2, 6], [2, 4], [4, 7], [2, 3]]], [[1, 5], [2, 6], [5, 6]]]], [[[[[1, 3, 8, 15, -2, False, 'kinematic'], [2, 3, 2, 7, -2, False, 'kinematic'], [3, 3, 2, 15, 2, True, 'static'], [4, 2, 2, 3, -2, False, 'dynamic'], [5, 1, 1, 6, -1, False, 'dynamic'], [6, 4, 2, 3, 0, False, 'static']], [[2, 4], [6, 5], [5, 6]]], [[5, 6]]], [[[[1, 4, 4, 7, 0, False, 'kinematic'], [2, 4, 2, 7, -2, False, 'dynamic'], [3, 3, 8, 15, 1, False, 'dynamic'], [4, 4, 1, 3, -2, False, 'static'], [5, 4, 1, 15, 0, False, 'static'], [6, 4, 1, 12, 0, False, 'dynamic'], [7, 2, 2, 6, -1, False, 'dynamic'], [8, 4, 4, 1, 2, False, 'dynamic']], [[2, 5], [2, 1], [6, 8], [1, 5], [4, 7]]], []], [[[[1, 1, 1, 15, -1, True, 'dynamic'], [2, 1, 1, 15, 2, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 4, 2, 12, 0, False, 'dynamic']], [[3, 4], [4, 3], [1, 3], [1, 2], [2, 4], [4, 1]]], [[1, 3]]], [[[[1, 2, 4, 6, -2, False, 'static'], [2, 2, 4, 15, 0, False, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 4, 1, 1, 2, False, 'dynamic'], [2, 4, 4, 1, 0, False, 'dynamic'], [3, 2, 2, 7, 2, False, 'static'], [4, 3, 2, 7, 2, False, 'static']], [[3, 2], [3, 1], [4, 2], [2, 4], [1, 4], [2, 1], [4, 2], [4, 3], [2, 4], [4, 2]]], [[1, 3], [1, 4]]], [[[[1, 3, 1, 7, -1, False, 'dynamic'], [2, 3, 1, 7, -1, False, 'dynamic'], [3, 3, 1, 6, -1, False, 'static'], [4, 1, 8, 6, 2, False, 'static'], [5, 3, 2, 12, -1, False, 'dynamic'], [6, 1, 8, 15, -1, False, 'static'], [7, 4, 2, 1, 1, True, 'dynamic']], [[4, 2], [6, 5], [3, 6], [5, 7], [2, 7], [5, 6], [1, 4], [6, 2], [6, 2], [6, 4]]], [[2, 7]]], [[[[1, 4, 1, 1, 1, False, 'static'], [2, 4, 1, 15, 2, False, 'static'], [3, 3, 2, 15, 1, False, 'dynamic'], [4, 2, 4, 6, -2, True, 'kinematic'], [5, 1, 2, 1, -1, True, 'dynamic'], [6, 1, 8, 12, 2, False, 'dynamic'], [7, 2, 1, 7, 1, False, 'dynamic'], [8, 3, 2, 1, 0, False, 'dynamic']], [[5, 3], [2, 6], [8, 7], [1, 2]]], [[2, 6], [7, 8]]], [[[[1, 4, 4, 1, 2, False, 'dynamic'], [2, 1, 2, 12, -1, False, 'kinematic'], [3, 3, 1, 12, 2, False, 'static'], [4, 1, 1, 15, 0, False, 'kinematic'], [5, 3, 1, 6, -2, False, 'static'], [6, 2, 2, 6, 2, False, 'kinematic']], [[1, 2], [3, 5], [3, 4], [2, 6], [1, 6], [4, 3], [5, 2], [1, 2]]], [[1, 6]]]], [[[[[1, 3, 1, 15, 1, False, 'dynamic'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 4, 8, 15, 0, False, 'dynamic'], [4, 4, 8, 1, 2, True, 'dynamic'], [5, 2, 4, 1, 0, False, 'dynamic'], [6, 3, 2, 15, -1, False, 'kinematic'], [7, 2, 1, 6, 1, True, 'kinematic'], [8, 3, 2, 3, 1, True, 'kinematic']], [[1, 7], [2, 5], [3, 4]]], [[1, 7]]], [[[[1, 1, 8, 6, 2, False, 'dynamic'], [2, 3, 4, 6, 1, False, 'kinematic'], [3, 3, 1, 15, -1, False, 'static'], [4, 4, 1, 12, 0, True, 'kinematic'], [5, 1, 4, 15, 0, False, 'dynamic'], [6, 3, 2, 7, 1, True, 'dynamic'], [7, 2, 1, 15, 0, False, 'static'], [8, 3, 8, 15, 2, False, 'dynamic']], [[7, 8], [1, 2], [2, 1], [5, 1], [3, 8], [5, 7], [7, 3]]], [[5, 7], [7, 8]]], [[[[1, 4, 1, 7, 0, False, 'dynamic'], [2, 2, 4, 15, -2, False, 'kinematic'], [3, 3, 8, 6, 2, False, 'dynamic'], [4, 1, 1, 12, 0, False, 'dynamic']], [[3, 2], [4, 3], [4, 1], [4, 2], [3, 4], [4, 1]]], [[2, 3], [2, 4]]], [[[[1, 4, 4, 15, -2, False, 'dynamic'], [2, 4, 1, 7, 1, False, 'kinematic'], [3, 1, 8, 7, -1, False, 'static'], [4, 3, 1, 15, 1, False, 'dynamic'], [5, 1, 8, 6, -1, False, 'dynamic'], [6, 1, 8, 1, -2, False, 'static']], [[4, 6], [6, 5], [5, 3], [3, 2], [2, 3]]], [[4, 6]]], [[[[1, 4, 1, 12, -2, False, 'dynamic'], [2, 4, 4, 12, -2, False, 'static'], [3, 2, 8, 7, -2, False, 'static']], [[3, 1], [3, 1], [1, 3], [2, 1], [2, 3], [3, 2], [3, 1], [2, 3], [3, 2]]], []], [[[[1, 3, 8, 15, 0, False, 'dynamic'], [2, 4, 2, 15, 1, False, 'dynamic'], [3, 4, 8, 15, 1, False, 'dynamic'], [4, 2, 4, 1, -2, False, 'dynamic'], [5, 4, 2, 15, -1, False, 'dynamic'], [6, 4, 8, 15, 1, False, 'static'], [7, 3, 1, 3, 1, False, 'dynamic']], [[1, 7], [2, 4], [7, 6], [5, 2], [7, 2]]], [[2, 7], [6, 7]]], [[[[1, 3, 4, 3, -2, True, 'dynamic'], [2, 1, 2, 6, 0, False, 'dynamic'], [3, 3, 2, 6, -2, False, 'dynamic'], [4, 3, 8, 15, 1, False, 'dynamic'], [5, 4, 4, 6, 1, False, 'kinematic'], [6, 4, 4, 15, -2, True, 'dynamic'], [7, 2, 8, 12, -2, False, 'dynamic'], [8, 2, 4, 15, 2, False, 'dynamic']], [[8, 6], [6, 7], [1, 4], [1, 8], [5, 1], [5, 2], [6, 8]]], [[2, 5], [6, 8]]], [[[[1, 1, 2, 7, 2, False, 'static'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 2, 4, 1, -2, True, 'dynamic'], [4, 2, 4, 7, -2, False, 'dynamic'], [5, 4, 4, 12, 2, False, 'static'], [6, 1, 2, 3, 1, False, 'dynamic']], [[4, 5], [2, 4], [2, 6], [5, 6], [4, 5], [6, 2], [2, 4], [4, 6], [1, 2], [6, 1]]], [[2, 6], [4, 5]]]], [[[[[1, 3, 1, 12, -2, False, 'static'], [2, 3, 8, 12, 1, False, 'dynamic'], [3, 4, 2, 15, 1, True, 'dynamic'], [4, 2, 4, 1, 1, True, 'kinematic'], [5, 3, 4, 6, -2, False, 'kinematic'], [6, 3, 4, 6, -2, False, 'kinematic'], [7, 1, 4, 7, -2, True, 'dynamic'], [8, 3, 2, 6, 2, False, 'dynamic'], [9, 4, 1, 7, 0, False, 'dynamic'], [10, 3, 2, 15, 0, False, 'dynamic']], [[7, 1], [2, 10], [7, 8], [5, 1], [1, 9], [5, 7]]], [[7, 8]]], [[[[1, 4, 2, 1, 0, False, 'dynamic'], [2, 1, 8, 15, 1, False, 'static'], [3, 3, 2, 3, 1, False, 'dynamic'], [4, 2, 2, 15, -2, False, 'dynamic'], [5, 2, 1, 6, 2, False, 'dynamic'], [6, 1, 4, 15, 1, True, 'static'], [7, 4, 4, 1, 1, False, 'kinematic'], [8, 2, 8, 7, 0, True, 'dynamic'], [9, 3, 4, 15, 0, False, 'kinematic']], [[8, 4], [9, 6], [1, 8], [8, 2], [3, 7], [1, 4], [8, 9], [4, 9], [4, 2], [2, 3]]], [[2, 3], [2, 4], [3, 7], [4, 9], [8, 9]]], [[[[1, 1, 1, 6, 2, False, 'kinematic'], [2, 3, 4, 15, 1, False, 'dynamic'], [3, 4, 4, 6, 2, False, 'kinematic'], [4, 1, 1, 6, -1, False, 'kinematic'], [5, 2, 4, 7, -1, True, 'dynamic'], [6, 2, 8, 12, 1, False, 'kinematic'], [7, 3, 8, 6, 0, False, 'static'], [8, 4, 4, 12, 2, False, 'static'], [9, 3, 2, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [9, 6], [5, 4]]], [[2, 3]]], [[[[1, 1, 2, 15, 0, True, 'dynamic'], [2, 2, 8, 15, 1, True, 'dynamic'], [3, 2, 2, 12, 1, False, 'kinematic'], [4, 1, 1, 15, 2, True, 'kinematic'], [5, 1, 8, 15, -1, False, 'kinematic']], [[5, 3], [1, 5], [4, 5], [3, 4], [4, 3]]], []], [[[[1, 2, 1, 15, 2, False, 'dynamic'], [2, 2, 8, 15, 0, False, 'kinematic'], [3, 4, 1, 3, 1, False, 'static'], [4, 2, 8, 3, 2, False, 'static'], [5, 2, 4, 3, 0, False, 'static'], [6, 1, 4, 6, -1, True, 'static'], [7, 1, 8, 6, -2, True, 'kinematic'], [8, 2, 2, 6, 0, False, 'dynamic'], [9, 4, 2, 7, 2, False, 'dynamic']], [[1, 2], [6, 3], [9, 5], [7, 6], [5, 3], [4, 9], [1, 5], [5, 7], [9, 7]]], [[4, 9], [5, 9]]], [[[[1, 2, 1, 12, -1, True, 'dynamic'], [2, 3, 8, 15, 0, False, 'dynamic'], [3, 1, 1, 1, -2, True, 'dynamic'], [4, 4, 8, 3, -2, False, 'kinematic'], [5, 4, 1, 6, -2, False, 'dynamic'], [6, 1, 8, 3, -2, False, 'dynamic'], [7, 2, 2, 12, -1, False, 'kinematic'], [8, 3, 1, 1, 2, True, 'dynamic']], [[8, 2], [6, 1], [7, 6], [5, 3], [6, 8], [6, 2], [3, 2], [7, 6]]], [[1, 6], [6, 7]]], [[[[1, 3, 2, 3, 0, False, 'static'], [2, 1, 1, 15, -1, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 1, 1, 3, -1, False, 'dynamic'], [5, 4, 8, 7, -2, False, 'kinematic'], [6, 4, 4, 12, 1, False, 'dynamic'], [7, 1, 2, 12, 2, False, 'dynamic'], [8, 2, 8, 12, 2, False, 'dynamic'], [9, 3, 4, 12, -1, False, 'static'], [10, 3, 4, 1, 1, False, 'static']], [[4, 9], [7, 6], [2, 9], [3, 10], [4, 8], [2, 1], [3, 10], [5, 10], [10, 6]]], [[1, 2], [6, 10]]], [[[[1, 1, 1, 3, 0, False, 'kinematic'], [2, 1, 1, 15, 1, False, 'static'], [3, 1, 8, 6, 0, False, 'kinematic'], [4, 3, 2, 7, 0, False, 'dynamic'], [5, 1, 1, 3, 0, False, 'kinematic'], [6, 2, 2, 1, 1, False, 'dynamic']], [[2, 6], [4, 5], [4, 5], [6, 5], [6, 1]]], [[1, 6], [2, 6], [4, 5], [5, 6]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"b3e0330f61ccacc46ff06d65f81ece824028fd037da31d4cdb4586b51e109e07","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(fixtures, candidates):\n    fx = {f[0]: f for f in fixtures}\n    out = set()\n    for a, b in candidates:\n        fa, fb = fx[a], fx[b]\n        if fa[1] == fb[1]:\n            continue\n        if fa[6] != 'dynamic' and fb[6] != 'dynamic':\n            continue\n        ga, gb = fa[4], fb[4]\n        if ga == gb and ga != 0:\n            ok = ga > 0\n        else:\n            ok = (fa[2] & fb[3]) != 0 and (fb[2] & fa[3]) != 0\n        if not ok:\n            continue\n        if fa[5] and fb[5]:\n            continue\n        out.add((min(a, b), max(a, b)))\n    return [list(p) for p in sorted(out)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[[[1, 2, 8, 3, 0, False, 'static'], [2, 2, 4, 3, 0, True, 'dynamic'], [3, 3, 2, 15, 1, False, 'kinematic'], [4, 2, 4, 12, 1, False, 'dynamic'], [5, 3, 2, 6, 2, False, 'static']], [[1, 3], [3, 1], [3, 1], [4, 3], [3, 1], [3, 4]]], [[3, 4]]], [[[[1, 1, 1, 6, -1, False, 'kinematic'], [2, 4, 4, 6, -2, True, 'dynamic']], [[2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [2, 1], [1, 2], [1, 2]]], []], [[[[1, 3, 2, 1, 2, False, 'static'], [2, 1, 4, 15, 2, False, 'dynamic']], [[2, 1], [2, 1], [1, 2], [1, 2], [2, 1], [2, 1]]], [[1, 2]]], [[[[1, 4, 8, 6, 1, False, 'static'], [2, 2, 1, 3, 0, False, 'dynamic'], [3, 4, 8, 3, 1, False, 'static'], [4, 1, 8, 12, 1, False, 'static'], [5, 2, 2, 15, 0, False, 'kinematic']], [[3, 5], [4, 2], [5, 3], [5, 4]]], []], [[[[1, 4, 2, 15, -2, False, 'dynamic'], [2, 1, 1, 12, 0, False, 'static'], [3, 1, 1, 6, -2, False, 'dynamic']], [[1, 3], [1, 2], [1, 2], [1, 2], [2, 1]]], []], [[[[1, 3, 4, 7, -1, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic'], [3, 2, 4, 15, 1, False, 'static'], [4, 1, 2, 12, -1, True, 'static'], [5, 3, 1, 6, 0, False, 'static'], [6, 1, 4, 12, 2, False, 'dynamic']], [[3, 5], [6, 5], [5, 1], [2, 4], [4, 3], [4, 1], [4, 1], [2, 5], [6, 3]]], [[2, 5], [3, 6]]], [[[[1, 3, 2, 12, 2, False, 'dynamic'], [2, 4, 2, 15, 0, True, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 3, 8, 12, 2, False, 'static'], [2, 1, 1, 12, -1, False, 'dynamic'], [3, 3, 1, 15, 1, False, 'kinematic'], [4, 4, 4, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [1, 4]]], [[1, 4]]]], [[[[[1, 1, 2, 12, 1, False, 'kinematic'], [2, 4, 4, 15, 0, False, 'dynamic']], [[1, 2], [2, 1], [1, 2], [1, 2], [1, 2]]], [[1, 2]]], [[[[1, 2, 4, 12, 1, False, 'kinematic'], [2, 4, 1, 1, 1, False, 'dynamic'], [3, 1, 1, 6, -2, True, 'static'], [4, 4, 2, 7, 2, False, 'dynamic'], [5, 2, 1, 15, 1, True, 'dynamic'], [6, 4, 1, 12, 1, True, 'dynamic'], [7, 1, 1, 1, 0, False, 'dynamic']], [[1, 7], [1, 6], [5, 6], [5, 6], [6, 2], [5, 2], [6, 7], [5, 3], [1, 7]]], [[1, 6], [2, 5]]], [[[[1, 3, 8, 1, 0, False, 'dynamic'], [2, 2, 1, 15, -2, False, 'static'], [3, 3, 2, 1, -2, False, 'dynamic']], [[2, 3], [2, 3], [1, 3], [1, 2]]], [[1, 2]]], [[[[1, 3, 8, 6, 1, False, 'dynamic'], [2, 2, 8, 3, 1, False, 'dynamic'], [3, 1, 1, 3, 2, False, 'dynamic'], [4, 3, 2, 3, 1, False, 'static'], [5, 2, 8, 3, 2, False, 'dynamic']], [[5, 2], [4, 5], [1, 2], [2, 1], [1, 5], [3, 1], [4, 5], [4, 3], [3, 4]]], [[1, 2], [3, 4]]], [[[[1, 2, 2, 15, -2, False, 'dynamic'], [2, 2, 4, 1, -1, False, 'dynamic'], [3, 2, 2, 1, -2, True, 'dynamic'], [4, 3, 4, 15, -2, False, 'kinematic'], [5, 3, 8, 6, -1, False, 'dynamic']], [[1, 4], [3, 2], [2, 1], [2, 1], [2, 4], [1, 3], [3, 5], [1, 3], [4, 2], [2, 1]]], []], [[[[1, 1, 2, 3, 2, False, 'dynamic'], [2, 4, 2, 12, 1, False, 'kinematic'], [3, 2, 4, 6, -1, False, 'dynamic'], [4, 4, 8, 7, -1, True, 'dynamic'], [5, 2, 2, 3, 2, False, 'dynamic']], [[5, 2], [4, 3], [2, 5]]], []], [[[[1, 1, 2, 12, -1, False, 'dynamic'], [2, 2, 2, 3, -2, False, 'dynamic'], [3, 2, 2, 12, -2, False, 'static'], [4, 4, 4, 12, -1, False, 'static'], [5, 4, 1, 7, 1, False, 'kinematic']], [[5, 3], [4, 3], [1, 5]]], []], [[[[1, 3, 4, 12, -2, False, 'dynamic'], [2, 1, 2, 6, 2, True, 'kinematic'], [3, 2, 8, 12, 2, True, 'kinematic'], [4, 4, 2, 1, -2, False, 'kinematic'], [5, 4, 8, 15, 2, False, 'kinematic'], [6, 2, 4, 7, 2, False, 'dynamic'], [7, 1, 1, 15, 2, False, 'static']], [[6, 5], [4, 1], [2, 4], [5, 1], [4, 3], [4, 5], [2, 6], [2, 4], [4, 7], [2, 3]]], [[1, 5], [2, 6], [5, 6]]]], [[[[[1, 3, 8, 15, -2, False, 'kinematic'], [2, 3, 2, 7, -2, False, 'kinematic'], [3, 3, 2, 15, 2, True, 'static'], [4, 2, 2, 3, -2, False, 'dynamic'], [5, 1, 1, 6, -1, False, 'dynamic'], [6, 4, 2, 3, 0, False, 'static']], [[2, 4], [6, 5], [5, 6]]], [[5, 6]]], [[[[1, 4, 4, 7, 0, False, 'kinematic'], [2, 4, 2, 7, -2, False, 'dynamic'], [3, 3, 8, 15, 1, False, 'dynamic'], [4, 4, 1, 3, -2, False, 'static'], [5, 4, 1, 15, 0, False, 'static'], [6, 4, 1, 12, 0, False, 'dynamic'], [7, 2, 2, 6, -1, False, 'dynamic'], [8, 4, 4, 1, 2, False, 'dynamic']], [[2, 5], [2, 1], [6, 8], [1, 5], [4, 7]]], []], [[[[1, 1, 1, 15, -1, True, 'dynamic'], [2, 1, 1, 15, 2, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 4, 2, 12, 0, False, 'dynamic']], [[3, 4], [4, 3], [1, 3], [1, 2], [2, 4], [4, 1]]], [[1, 3]]], [[[[1, 2, 4, 6, -2, False, 'static'], [2, 2, 4, 15, 0, False, 'dynamic']], [[1, 2], [1, 2], [1, 2], [2, 1], [2, 1], [2, 1], [1, 2]]], []], [[[[1, 4, 1, 1, 2, False, 'dynamic'], [2, 4, 4, 1, 0, False, 'dynamic'], [3, 2, 2, 7, 2, False, 'static'], [4, 3, 2, 7, 2, False, 'static']], [[3, 2], [3, 1], [4, 2], [2, 4], [1, 4], [2, 1], [4, 2], [4, 3], [2, 4], [4, 2]]], [[1, 3], [1, 4]]], [[[[1, 3, 1, 7, -1, False, 'dynamic'], [2, 3, 1, 7, -1, False, 'dynamic'], [3, 3, 1, 6, -1, False, 'static'], [4, 1, 8, 6, 2, False, 'static'], [5, 3, 2, 12, -1, False, 'dynamic'], [6, 1, 8, 15, -1, False, 'static'], [7, 4, 2, 1, 1, True, 'dynamic']], [[4, 2], [6, 5], [3, 6], [5, 7], [2, 7], [5, 6], [1, 4], [6, 2], [6, 2], [6, 4]]], [[2, 7]]], [[[[1, 4, 1, 1, 1, False, 'static'], [2, 4, 1, 15, 2, False, 'static'], [3, 3, 2, 15, 1, False, 'dynamic'], [4, 2, 4, 6, -2, True, 'kinematic'], [5, 1, 2, 1, -1, True, 'dynamic'], [6, 1, 8, 12, 2, False, 'dynamic'], [7, 2, 1, 7, 1, False, 'dynamic'], [8, 3, 2, 1, 0, False, 'dynamic']], [[5, 3], [2, 6], [8, 7], [1, 2]]], [[2, 6], [7, 8]]], [[[[1, 4, 4, 1, 2, False, 'dynamic'], [2, 1, 2, 12, -1, False, 'kinematic'], [3, 3, 1, 12, 2, False, 'static'], [4, 1, 1, 15, 0, False, 'kinematic'], [5, 3, 1, 6, -2, False, 'static'], [6, 2, 2, 6, 2, False, 'kinematic']], [[1, 2], [3, 5], [3, 4], [2, 6], [1, 6], [4, 3], [5, 2], [1, 2]]], [[1, 6]]]], [[[[[1, 3, 1, 15, 1, False, 'dynamic'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 4, 8, 15, 0, False, 'dynamic'], [4, 4, 8, 1, 2, True, 'dynamic'], [5, 2, 4, 1, 0, False, 'dynamic'], [6, 3, 2, 15, -1, False, 'kinematic'], [7, 2, 1, 6, 1, True, 'kinematic'], [8, 3, 2, 3, 1, True, 'kinematic']], [[1, 7], [2, 5], [3, 4]]], [[1, 7]]], [[[[1, 1, 8, 6, 2, False, 'dynamic'], [2, 3, 4, 6, 1, False, 'kinematic'], [3, 3, 1, 15, -1, False, 'static'], [4, 4, 1, 12, 0, True, 'kinematic'], [5, 1, 4, 15, 0, False, 'dynamic'], [6, 3, 2, 7, 1, True, 'dynamic'], [7, 2, 1, 15, 0, False, 'static'], [8, 3, 8, 15, 2, False, 'dynamic']], [[7, 8], [1, 2], [2, 1], [5, 1], [3, 8], [5, 7], [7, 3]]], [[5, 7], [7, 8]]], [[[[1, 4, 1, 7, 0, False, 'dynamic'], [2, 2, 4, 15, -2, False, 'kinematic'], [3, 3, 8, 6, 2, False, 'dynamic'], [4, 1, 1, 12, 0, False, 'dynamic']], [[3, 2], [4, 3], [4, 1], [4, 2], [3, 4], [4, 1]]], [[2, 3], [2, 4]]], [[[[1, 4, 4, 15, -2, False, 'dynamic'], [2, 4, 1, 7, 1, False, 'kinematic'], [3, 1, 8, 7, -1, False, 'static'], [4, 3, 1, 15, 1, False, 'dynamic'], [5, 1, 8, 6, -1, False, 'dynamic'], [6, 1, 8, 1, -2, False, 'static']], [[4, 6], [6, 5], [5, 3], [3, 2], [2, 3]]], [[4, 6]]], [[[[1, 4, 1, 12, -2, False, 'dynamic'], [2, 4, 4, 12, -2, False, 'static'], [3, 2, 8, 7, -2, False, 'static']], [[3, 1], [3, 1], [1, 3], [2, 1], [2, 3], [3, 2], [3, 1], [2, 3], [3, 2]]], []], [[[[1, 3, 8, 15, 0, False, 'dynamic'], [2, 4, 2, 15, 1, False, 'dynamic'], [3, 4, 8, 15, 1, False, 'dynamic'], [4, 2, 4, 1, -2, False, 'dynamic'], [5, 4, 2, 15, -1, False, 'dynamic'], [6, 4, 8, 15, 1, False, 'static'], [7, 3, 1, 3, 1, False, 'dynamic']], [[1, 7], [2, 4], [7, 6], [5, 2], [7, 2]]], [[2, 7], [6, 7]]], [[[[1, 3, 4, 3, -2, True, 'dynamic'], [2, 1, 2, 6, 0, False, 'dynamic'], [3, 3, 2, 6, -2, False, 'dynamic'], [4, 3, 8, 15, 1, False, 'dynamic'], [5, 4, 4, 6, 1, False, 'kinematic'], [6, 4, 4, 15, -2, True, 'dynamic'], [7, 2, 8, 12, -2, False, 'dynamic'], [8, 2, 4, 15, 2, False, 'dynamic']], [[8, 6], [6, 7], [1, 4], [1, 8], [5, 1], [5, 2], [6, 8]]], [[2, 5], [6, 8]]], [[[[1, 1, 2, 7, 2, False, 'static'], [2, 4, 4, 1, 1, False, 'dynamic'], [3, 2, 4, 1, -2, True, 'dynamic'], [4, 2, 4, 7, -2, False, 'dynamic'], [5, 4, 4, 12, 2, False, 'static'], [6, 1, 2, 3, 1, False, 'dynamic']], [[4, 5], [2, 4], [2, 6], [5, 6], [4, 5], [6, 2], [2, 4], [4, 6], [1, 2], [6, 1]]], [[2, 6], [4, 5]]]], [[[[[1, 3, 1, 12, -2, False, 'static'], [2, 3, 8, 12, 1, False, 'dynamic'], [3, 4, 2, 15, 1, True, 'dynamic'], [4, 2, 4, 1, 1, True, 'kinematic'], [5, 3, 4, 6, -2, False, 'kinematic'], [6, 3, 4, 6, -2, False, 'kinematic'], [7, 1, 4, 7, -2, True, 'dynamic'], [8, 3, 2, 6, 2, False, 'dynamic'], [9, 4, 1, 7, 0, False, 'dynamic'], [10, 3, 2, 15, 0, False, 'dynamic']], [[7, 1], [2, 10], [7, 8], [5, 1], [1, 9], [5, 7]]], [[7, 8]]], [[[[1, 4, 2, 1, 0, False, 'dynamic'], [2, 1, 8, 15, 1, False, 'static'], [3, 3, 2, 3, 1, False, 'dynamic'], [4, 2, 2, 15, -2, False, 'dynamic'], [5, 2, 1, 6, 2, False, 'dynamic'], [6, 1, 4, 15, 1, True, 'static'], [7, 4, 4, 1, 1, False, 'kinematic'], [8, 2, 8, 7, 0, True, 'dynamic'], [9, 3, 4, 15, 0, False, 'kinematic']], [[8, 4], [9, 6], [1, 8], [8, 2], [3, 7], [1, 4], [8, 9], [4, 9], [4, 2], [2, 3]]], [[2, 3], [2, 4], [3, 7], [4, 9], [8, 9]]], [[[[1, 1, 1, 6, 2, False, 'kinematic'], [2, 3, 4, 15, 1, False, 'dynamic'], [3, 4, 4, 6, 2, False, 'kinematic'], [4, 1, 1, 6, -1, False, 'kinematic'], [5, 2, 4, 7, -1, True, 'dynamic'], [6, 2, 8, 12, 1, False, 'kinematic'], [7, 3, 8, 6, 0, False, 'static'], [8, 4, 4, 12, 2, False, 'static'], [9, 3, 2, 1, 2, False, 'dynamic']], [[3, 2], [4, 1], [9, 6], [5, 4]]], [[2, 3]]], [[[[1, 1, 2, 15, 0, True, 'dynamic'], [2, 2, 8, 15, 1, True, 'dynamic'], [3, 2, 2, 12, 1, False, 'kinematic'], [4, 1, 1, 15, 2, True, 'kinematic'], [5, 1, 8, 15, -1, False, 'kinematic']], [[5, 3], [1, 5], [4, 5], [3, 4], [4, 3]]], []], [[[[1, 2, 1, 15, 2, False, 'dynamic'], [2, 2, 8, 15, 0, False, 'kinematic'], [3, 4, 1, 3, 1, False, 'static'], [4, 2, 8, 3, 2, False, 'static'], [5, 2, 4, 3, 0, False, 'static'], [6, 1, 4, 6, -1, True, 'static'], [7, 1, 8, 6, -2, True, 'kinematic'], [8, 2, 2, 6, 0, False, 'dynamic'], [9, 4, 2, 7, 2, False, 'dynamic']], [[1, 2], [6, 3], [9, 5], [7, 6], [5, 3], [4, 9], [1, 5], [5, 7], [9, 7]]], [[4, 9], [5, 9]]], [[[[1, 2, 1, 12, -1, True, 'dynamic'], [2, 3, 8, 15, 0, False, 'dynamic'], [3, 1, 1, 1, -2, True, 'dynamic'], [4, 4, 8, 3, -2, False, 'kinematic'], [5, 4, 1, 6, -2, False, 'dynamic'], [6, 1, 8, 3, -2, False, 'dynamic'], [7, 2, 2, 12, -1, False, 'kinematic'], [8, 3, 1, 1, 2, True, 'dynamic']], [[8, 2], [6, 1], [7, 6], [5, 3], [6, 8], [6, 2], [3, 2], [7, 6]]], [[1, 6], [6, 7]]], [[[[1, 3, 2, 3, 0, False, 'static'], [2, 1, 1, 15, -1, False, 'dynamic'], [3, 3, 2, 15, 0, False, 'static'], [4, 1, 1, 3, -1, False, 'dynamic'], [5, 4, 8, 7, -2, False, 'kinematic'], [6, 4, 4, 12, 1, False, 'dynamic'], [7, 1, 2, 12, 2, False, 'dynamic'], [8, 2, 8, 12, 2, False, 'dynamic'], [9, 3, 4, 12, -1, False, 'static'], [10, 3, 4, 1, 1, False, 'static']], [[4, 9], [7, 6], [2, 9], [3, 10], [4, 8], [2, 1], [3, 10], [5, 10], [10, 6]]], [[1, 2], [6, 10]]], [[[[1, 1, 1, 3, 0, False, 'kinematic'], [2, 1, 1, 15, 1, False, 'static'], [3, 1, 8, 6, 0, False, 'kinematic'], [4, 3, 2, 7, 0, False, 'dynamic'], [5, 1, 1, 3, 0, False, 'kinematic'], [6, 2, 2, 1, 1, False, 'dynamic']], [[2, 6], [4, 5], [4, 5], [6, 5], [6, 1]]], [[1, 6], [2, 6], [4, 5], [5, 6]]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"case %d\" % i, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model with stipulated toy conventions; not a production physics engine or spatial index. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-collision_detection_broadphase-fixture-pair-filter-group-override-precedence","generated_at":"2026-09-29T14:50:59.519945+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Broadphase stages decide which object pairs ever reach narrowphase; a wrong boundary, ordering or bookkeeping rule silently drops real contacts or floods the solver with false candidates.","repair":"Equal nonzero groups decide before masks.","root_cause":"The mask test is evaluated first and the group only vetoes.","sha256":"41f54a355ce38b4d588207f89765f1842afb65ec97bd352835ab744896963326","title":"Positive collision groups cannot override masks · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.912,"exit_code":1,"observations":[{"actual":[[3,4]],"check":"case 0","expected":[[3,4]],"passed":true},{"actual":[],"check":"case 1","expected":[],"passed":true},{"actual":[[1,2]],"check":"case 2","expected":[[1,2]],"passed":true},{"actual":[],"check":"case 3","expected":[],"passed":true},{"actual":[[1,3]],"check":"case 4","expected":[],"passed":false},{"actual":[[1,4],[2,5],[3,6]],"check":"case 5","expected":[[2,5],[3,6]],"passed":false},{"actual":[],"check":"case 6","expected":[],"passed":true},{"actual":[[1,4]],"check":"case 7","expected":[[1,4]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[3, 4]], \"expected\": [[3, 4]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [[1, 3]], \"expected\": [], \"passed\": false}, {\"check\": \"case 5\", \"actual\": [[1, 4], [2, 5], [3, 6]], \"expected\": [[2, 5], [3, 6]], \"passed\": false}, {\"check\": \"case 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[1, 4]], \"expected\": [[1, 4]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.987,"exit_code":1,"observations":[{"actual":[],"check":"case 0","expected":[[3,4]],"passed":false},{"actual":[],"check":"case 1","expected":[],"passed":true},{"actual":[],"check":"case 2","expected":[[1,2]],"passed":false},{"actual":[],"check":"case 3","expected":[],"passed":true},{"actual":[],"check":"case 4","expected":[],"passed":true},{"actual":[[2,5],[3,6]],"check":"case 5","expected":[[2,5],[3,6]],"passed":true},{"actual":[],"check":"case 6","expected":[],"passed":true},{"actual":[],"check":"case 7","expected":[[1,4]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [], \"expected\": [[3, 4]], \"passed\": false}, {\"check\": \"case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [], \"expected\": [[1, 2]], \"passed\": false}, {\"check\": \"case 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [[2, 5], [3, 6]], \"expected\": [[2, 5], [3, 6]], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [], \"expected\": [[1, 4]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.226,"exit_code":0,"observations":[{"actual":[[3,4]],"check":"case 0","expected":[[3,4]],"passed":true},{"actual":[],"check":"case 1","expected":[],"passed":true},{"actual":[[1,2]],"check":"case 2","expected":[[1,2]],"passed":true},{"actual":[],"check":"case 3","expected":[],"passed":true},{"actual":[],"check":"case 4","expected":[],"passed":true},{"actual":[[2,5],[3,6]],"check":"case 5","expected":[[2,5],[3,6]],"passed":true},{"actual":[],"check":"case 6","expected":[],"passed":true},{"actual":[[1,4]],"check":"case 7","expected":[[1,4]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"case 0\", \"actual\": [[3, 4]], \"expected\": [[3, 4]], \"passed\": true}, {\"check\": \"case 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 2\", \"actual\": [[1, 2]], \"expected\": [[1, 2]], \"passed\": true}, {\"check\": \"case 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 5\", \"actual\": [[2, 5], [3, 6]], \"expected\": [[2, 5], [3, 6]], \"passed\": true}, {\"check\": \"case 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"case 7\", \"actual\": [[1, 4]], \"expected\": [[1, 4]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}