FA-94806 / Exam timetabling constraints / Open access
Room-period at the concurrent exam limit reported · case 01
Rooms hosting exactly k exams are flagged.
ROOT CAUSE
The load comparison is inclusive.
VERIFIED REPAIR
Report only more than k distinct exams.
Unsuccessful approach: Counting assignment rows lets duplicate rows exceed the limit.
Case contract
assign [exam, room, period] (rows may repeat); building room -> building; k = maximum distinct exams per room-period. Findings per exam (by id): multi_period if it occupies more than one period, split_buildings if its rooms span more than one building; then room_load for room-periods hosting more than k distinct exams.
Why this case matters
Split exams must stay in one building and rooms have limits on concurrent exams.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, building, k):
rooms_of = {}
periods_of = {}
load = {}
for ex, r, p in assign:
rooms_of.setdefault(ex, []).append(r)
periods_of.setdefault(ex, set()).add(p)
load.setdefault((r, p), set()).add(ex)
out = []
for ex in sorted(rooms_of):
if len(periods_of[ex]) > 1:
out.append(['multi_period', ex])
if len({building[r] for r in rooms_of[ex]}) > 1:
out.append(['split_buildings', ex])
for (r, p) in sorted(load):
if len(load[(r, p)]) >= k:
out.append(['room_load', r, p])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('regression variant: room load distinct 2',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R3', 2],
['MATH101', 'R4', 1], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']]),
('partial repair guard 3',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 6',
[[['MATH101H', 'R3', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 2], ['PHYS110', 'R1', 2],
['MATH101', 'R2', 0], ['MATH101', 'R4', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]]),
('normal control 7',
[[['MATH101', 'R3', 2], ['CHEM120', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['MATH101H', 'R2', 1], ['MATH101H', 'R3', 0], ['CHEM120', 'R4', 2], ['MATH101H', 'R2', 0],
['CHEM120', 'R3', 1], ['CHEM120', 'R2', 0], ['PHYS110', 'R3', 0], ['CHEM120', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R3', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['split_buildings', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('partial repair guard 3',
[[['MATH101', 'R2', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 4',
[[['MATH101H', 'R2', 1], ['CHEM120', 'R2', 0], ['MATH101', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 5',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R4', 1], ['PHYS110', 'R4', 1], ['CHEM120', 'R4', 2],
['CHEM120', 'R4', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['room_load', 'R4', 1]]),
('normal control 6',
[[['CHEM120', 'R1', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['PHYS110', 'R2', 0], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 8',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('regression variant: room load distinct 2',
[[['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101', 'R2', 0], ['CHEM120', 'R3', 2],
['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'MATH101H']]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['CHEM120', 'R2', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1], ['MATH101', 'R1', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101H', 'R4', 1], ['CHEM120', 'R2', 2], ['MATH101', 'R4', 2], ['PHYS110', 'R2', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R4', 2], ['MATH101', 'R3', 1], ['PHYS110', 'R3', 1],
['PHYS110', 'R1', 1], ['PHYS110', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'PHYS110'], ['room_load', 'R3', 1]]),
('normal control 8',
[[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R4', 0], ['CHEM120', 'R2', 2], ['MATH101', 'R2', 2], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110'],
['room_load', 'R1', 2], ['room_load', 'R2', 2]]),
('partial repair guard 3',
[[['MATH101H', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101H', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 5',
[[['MATH101', 'R1', 2], ['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R3', 0],
['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['room_load', 'R1', 1]]),
('normal control 6',
[[['MATH101H', 'R4', 2], ['MATH101', 'R1', 0], ['PHYS110', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 7',
[[['MATH101', 'R3', 2], ['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['CHEM120', 'R3', 2], ['MATH101', 'R2', 0], ['MATH101H', 'R4', 1], ['MATH101H', 'R4', 0],
['MATH101H', 'R1', 0], ['PHYS110', 'R2', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('partial repair guard 3',
[[['MATH101H', 'R2', 2], ['MATH101', 'R1', 1], ['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('normal control 5',
[[['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['MATH101H', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H']]),
('normal control 7',
[[['PHYS110', 'R3', 1], ['PHYS110', 'R3', 2], ['PHYS110', 'R4', 1], ['PHYS110', 'R1', 2],
['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('normal control 8',
[[['PHYS110', 'R2', 0], ['CHEM120', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 0],
['MATH101', 'R4', 0], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: room load distinct 1 | [['room_load', 'R1', 0], ['room_load', 'R2', 0]] | [] | Failed |
| regression variant: room load distinct 2 | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['room_load', 'R2', 0], ['room_load', 'R3', 1], ['room_load', 'R3', 2], ['room_load', 'R4', 0], ['room_load', 'R4', 1]] | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']] | Failed |
| partial repair guard 3 | [['room_load', 'R1', 1], ['room_load', 'R3', 2]] | [] | Failed |
| boundary control 4 | [['multi_period', 'A'], ['room_load', 'R1', 0], ['room_load', 'R1', 1]] | [['multi_period', 'A']] | Failed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R1', 2], ['room_load', 'R2', 0], ['room_load', 'R2', 2], ['room_load', 'R3', 1], ['room_load', 'R4', 1]] | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]] | Failed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R2', 1], ['room_load', 'R3', 0], ['room_load', 'R3', 1], ['room_load', 'R4', 2]] | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]] | Failed |
SHA-256 / f6725280cc50baeab191aa01df154766cd5d6fffd45e3b2e6d3de42f263b60c8
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, building, k):
rooms_of = {}
periods_of = {}
load = {}
for ex, r, p in assign:
rooms_of.setdefault(ex, []).append(r)
periods_of.setdefault(ex, set()).add(p)
load.setdefault((r, p), set()).add(ex)
out = []
for ex in sorted(rooms_of):
if len(periods_of[ex]) > 1:
out.append(['multi_period', ex])
if len({building[r] for r in rooms_of[ex]}) > 1:
out.append(['split_buildings', ex])
for (r, p) in sorted(load):
if sum(1 for e, rr, pp in assign if rr == r and pp == p) > k:
out.append(['room_load', r, p])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('regression variant: room load distinct 2',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R3', 2],
['MATH101', 'R4', 1], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']]),
('partial repair guard 3',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 6',
[[['MATH101H', 'R3', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 2], ['PHYS110', 'R1', 2],
['MATH101', 'R2', 0], ['MATH101', 'R4', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]]),
('normal control 7',
[[['MATH101', 'R3', 2], ['CHEM120', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['MATH101H', 'R2', 1], ['MATH101H', 'R3', 0], ['CHEM120', 'R4', 2], ['MATH101H', 'R2', 0],
['CHEM120', 'R3', 1], ['CHEM120', 'R2', 0], ['PHYS110', 'R3', 0], ['CHEM120', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R3', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['split_buildings', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('partial repair guard 3',
[[['MATH101', 'R2', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 4',
[[['MATH101H', 'R2', 1], ['CHEM120', 'R2', 0], ['MATH101', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 5',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R4', 1], ['PHYS110', 'R4', 1], ['CHEM120', 'R4', 2],
['CHEM120', 'R4', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['room_load', 'R4', 1]]),
('normal control 6',
[[['CHEM120', 'R1', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['PHYS110', 'R2', 0], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 8',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('regression variant: room load distinct 2',
[[['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101', 'R2', 0], ['CHEM120', 'R3', 2],
['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'MATH101H']]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['CHEM120', 'R2', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1], ['MATH101', 'R1', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101H', 'R4', 1], ['CHEM120', 'R2', 2], ['MATH101', 'R4', 2], ['PHYS110', 'R2', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R4', 2], ['MATH101', 'R3', 1], ['PHYS110', 'R3', 1],
['PHYS110', 'R1', 1], ['PHYS110', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'PHYS110'], ['room_load', 'R3', 1]]),
('normal control 8',
[[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R4', 0], ['CHEM120', 'R2', 2], ['MATH101', 'R2', 2], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110'],
['room_load', 'R1', 2], ['room_load', 'R2', 2]]),
('partial repair guard 3',
[[['MATH101H', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101H', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 5',
[[['MATH101', 'R1', 2], ['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R3', 0],
['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['room_load', 'R1', 1]]),
('normal control 6',
[[['MATH101H', 'R4', 2], ['MATH101', 'R1', 0], ['PHYS110', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 7',
[[['MATH101', 'R3', 2], ['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['CHEM120', 'R3', 2], ['MATH101', 'R2', 0], ['MATH101H', 'R4', 1], ['MATH101H', 'R4', 0],
['MATH101H', 'R1', 0], ['PHYS110', 'R2', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('partial repair guard 3',
[[['MATH101H', 'R2', 2], ['MATH101', 'R1', 1], ['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('normal control 5',
[[['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['MATH101H', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H']]),
('normal control 7',
[[['PHYS110', 'R3', 1], ['PHYS110', 'R3', 2], ['PHYS110', 'R4', 1], ['PHYS110', 'R1', 2],
['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('normal control 8',
[[['PHYS110', 'R2', 0], ['CHEM120', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 0],
['MATH101', 'R4', 0], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: room load distinct 1 | [] | [] | Passed |
| regression variant: room load distinct 2 | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['room_load', 'R2', 0]] | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']] | Failed |
| partial repair guard 3 | [['room_load', 'R1', 1], ['room_load', 'R3', 2]] | [] | Failed |
| boundary control 4 | [['multi_period', 'A']] | [['multi_period', 'A']] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R2', 2]] | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]] | Failed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]] | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]] | Passed |
SHA-256 / 5f711eae581a6ea32277083c2b63ef95c52880ab8bc4206c5bfbeacd7fbc357d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(assign, building, k):
rooms_of = {}
periods_of = {}
load = {}
for ex, r, p in assign:
rooms_of.setdefault(ex, []).append(r)
periods_of.setdefault(ex, set()).add(p)
load.setdefault((r, p), set()).add(ex)
out = []
for ex in sorted(rooms_of):
if len(periods_of[ex]) > 1:
out.append(['multi_period', ex])
if len({building[r] for r in rooms_of[ex]}) > 1:
out.append(['split_buildings', ex])
for (r, p) in sorted(load):
if len(load[(r, p)]) > k:
out.append(['room_load', r, p])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('regression variant: room load distinct 2',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R3', 2],
['MATH101', 'R4', 1], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']]),
('partial repair guard 3',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 6',
[[['MATH101H', 'R3', 1], ['MATH101H', 'R2', 0], ['MATH101', 'R2', 2], ['PHYS110', 'R1', 2],
['MATH101', 'R2', 0], ['MATH101', 'R4', 1], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]]),
('normal control 7',
[[['MATH101', 'R3', 2], ['CHEM120', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['MATH101H', 'R2', 1], ['MATH101H', 'R3', 0], ['CHEM120', 'R4', 2], ['MATH101H', 'R2', 0],
['CHEM120', 'R3', 1], ['CHEM120', 'R2', 0], ['PHYS110', 'R3', 0], ['CHEM120', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R3', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['split_buildings', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R3', 2], ['MATH101H', 'R1', 1], ['MATH101', 'R3', 2], ['MATH101H', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('partial repair guard 3',
[[['MATH101', 'R2', 2], ['PHYS110', 'R3', 2], ['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 4',
[[['MATH101H', 'R2', 1], ['CHEM120', 'R2', 0], ['MATH101', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 5',
[[['CHEM120', 'R4', 0], ['CHEM120', 'R4', 1], ['PHYS110', 'R4', 1], ['CHEM120', 'R4', 2],
['CHEM120', 'R4', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['room_load', 'R4', 1]]),
('normal control 6',
[[['CHEM120', 'R1', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['PHYS110', 'R2', 0], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 8',
[[['MATH101H', 'R3', 1], ['MATH101', 'R2', 0], ['MATH101', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('regression variant: room load distinct 2',
[[['MATH101H', 'R1', 0], ['MATH101H', 'R1', 2], ['MATH101', 'R2', 0], ['CHEM120', 'R3', 2],
['MATH101', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'MATH101H']]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('normal control 5',
[[['CHEM120', 'R2', 2], ['MATH101', 'R1', 2], ['CHEM120', 'R1', 1], ['MATH101', 'R1', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101H', 'R4', 1], ['CHEM120', 'R2', 2], ['MATH101', 'R4', 2], ['PHYS110', 'R2', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R4', 2], ['MATH101', 'R3', 1], ['PHYS110', 'R3', 1],
['PHYS110', 'R1', 1], ['PHYS110', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'PHYS110'], ['room_load', 'R3', 1]]),
('normal control 8',
[[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 1]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['MATH101', 'R2', 1], ['MATH101', 'R1', 2], ['MATH101', 'R1', 2], ['PHYS110', 'R1', 2],
['PHYS110', 'R4', 0], ['CHEM120', 'R2', 2], ['MATH101', 'R2', 2], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110'],
['room_load', 'R1', 2], ['room_load', 'R2', 2]]),
('partial repair guard 3',
[[['MATH101H', 'R4', 0], ['CHEM120', 'R4', 1], ['MATH101H', 'R4', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R1', 0], ['B', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 5',
[[['MATH101', 'R1', 2], ['PHYS110', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101H', 'R3', 0],
['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101'], ['room_load', 'R1', 1]]),
('normal control 6',
[[['MATH101H', 'R4', 2], ['MATH101', 'R1', 0], ['PHYS110', 'R3', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 7',
[[['MATH101', 'R3', 2], ['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[]),
('normal control 8',
[[['CHEM120', 'R3', 2], ['MATH101', 'R2', 0], ['MATH101H', 'R4', 1], ['MATH101H', 'R4', 0],
['MATH101H', 'R1', 0], ['PHYS110', 'R2', 1], ['MATH101', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'],
['split_buildings', 'MATH101H']])],
[('regression: room load distinct 1',
[[['A', 'R1', 0], ['A', 'R1', 2]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'A']]),
('regression variant: room load distinct 2',
[[['PHYS110', 'R4', 1], ['CHEM120', 'R2', 2], ['PHYS110', 'R1', 0], ['CHEM120', 'R2', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('partial repair guard 3',
[[['MATH101H', 'R2', 2], ['MATH101', 'R1', 1], ['MATH101', 'R1', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[]),
('boundary control 4',
[[['A', 'R1', 0], ['A', 'R2', 0]], {'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1], []),
('normal control 5',
[[['CHEM120', 'R1', 2], ['CHEM120', 'R1', 0], ['MATH101H', 'R3', 2]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120']]),
('normal control 6',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 0], ['MATH101H', 'R1', 2], ['MATH101H', 'R1', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'MATH101H']]),
('normal control 7',
[[['PHYS110', 'R3', 1], ['PHYS110', 'R3', 2], ['PHYS110', 'R4', 1], ['PHYS110', 'R1', 2],
['PHYS110', 'R3', 1]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 2],
[['multi_period', 'PHYS110'], ['split_buildings', 'PHYS110']]),
('normal control 8',
[[['PHYS110', 'R2', 0], ['CHEM120', 'R1', 1], ['CHEM120', 'R3', 2], ['CHEM120', 'R3', 0],
['MATH101', 'R4', 0], ['PHYS110', 'R2', 0]],
{'R1': 'north', 'R2': 'north', 'R3': 'south', 'R4': 'south'}, 1],
[['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120']])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: room load distinct 1 | [] | [] | Passed |
| regression variant: room load distinct 2 | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']] | [['multi_period', 'CHEM120'], ['multi_period', 'MATH101'], ['split_buildings', 'MATH101']] | Passed |
| partial repair guard 3 | [] | [] | Passed |
| boundary control 4 | [['multi_period', 'A']] | [['multi_period', 'A']] | Passed |
| normal control 5 | [] | [] | Passed |
| normal control 6 | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]] | [['multi_period', 'MATH101'], ['split_buildings', 'MATH101'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0]] | Passed |
| normal control 7 | [] | [] | Passed |
| normal control 8 | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]] | [['multi_period', 'CHEM120'], ['split_buildings', 'CHEM120'], ['multi_period', 'MATH101H'], ['split_buildings', 'MATH101H'], ['room_load', 'R2', 0], ['room_load', 'R3', 0]] | Passed |
SHA-256 / 2cec70aee5f56e0ceb553d5cc776bcb68412a5259674521574f755f420138592
Verification & scope
Stipulated toy exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:52:07.848265+00:00.
Case digest / b119e095b1b7a9e7b27050536c7c4d16c0260a4139cd2f8f65f90075c2e07559