FAILURE MAP
← Case archive

FA-94511 / Exam timetabling constraints / Open access

Duplicated sitting rows count as extra exams · case 01

A repeated registration row pushes a student over the daily limit.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Starts are collected per row instead of per distinct exam.

VERIFIED REPAIR

Keep one start per distinct exam.

Unsuccessful approach: Deduplicating start times merges two different exams at the same time.

Case contract

sits [student, exam, start minute] (rows may repeat an exam). A student violates the limit if more than limit distinct exams start inside some half-open 24-hour window [t, t + 1440). Return [student, maximum count] for violators, by student.

Why this case matters

Maximum-exams-per-day rules are stated as rolling windows; calendar bucketing and inclusive windows both misreport.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(sits, limit):
    by = {}
    for st, ex, t in sits:
        by.setdefault(st, []).append(t)
    out = []
    for st in sorted(by):
        ts = sorted(by[st])
        best = 0
        j = 0
        for i in range(len(ts)):
            while ts[i] - ts[j] >= 1440:
                j += 1
            best = max(best, i - j + 1)
        if best > limit:
            out.append([st, best])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeated exam rows 1', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1],
   [['s1', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'ECON150', 1560], ['s4', 'BIO130', 2221], ['s3', 'MATH101H', 1740], ['s3', 'CHEM120', 840],
     ['s2', 'CHEM120', 720], ['s2', 'MATH101H', 540], ['s4', 'HIST140', 600], ['s3', 'MATH101', 840],
     ['s4', 'PHYS110', 3662], ['s3', 'ECON150', 1560], ['s3', 'BIO130', 540], ['s4', 'MATH101', 2041]],
    2],
   [['s3', 5]]),
  ('partial repair guard 3',
   [[['s1', 'PHYS110', 540], ['s2', 'PHYS110', 900], ['s2', 'HIST140', 600], ['s1', 'ECON150', 1800],
     ['s1', 'CHEM120', 540]],
    2],
   [['s1', 3]]),
  ('normal control 4',
   [[['s2', 'BIO130', 540], ['s3', 'ECON150', 540], ['s2', 'MATH101', 1380], ['s3', 'MATH101H', 2100],
     ['s3', 'PHYS110', 1260]],
    3],
   []),
  ('normal control 5',
   [[['s3', 'MATH101H', 2041], ['s3', 'BIO130', 600], ['s3', 'PHYS110', 3301], ['s3', 'ECON150', 4561],
     ['s3', 'ECON150', 4561]],
    3],
   []),
  ('normal control 6',
   [[['s4', 'MATH101', 4680], ['s4', 'CHEM120', 540], ['s5', 'BIO130', 600], ['s5', 'CHEM120', 2040],
     ['s4', 'BIO130', 7381], ['s4', 'HIST140', 6121], ['s4', 'MATH101H', 1800], ['s4', 'MATH101', 4680]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'ECON150', 4861], ['s3', 'HIST140', 540], ['s1', 'PHYS110', 1981], ['s1', 'BIO130', 540],
     ['s3', 'CHEM120', 540], ['s3', 'MATH101', 1800], ['s1', 'MATH101H', 4861]],
    2],
   [['s3', 3]]),
  ('normal control 8',
   [[['s3', 'CHEM120', 2039], ['s1', 'PHYS110', 540], ['s3', 'MATH101H', 600], ['s1', 'MATH101H', 2280],
     ['s1', 'MATH101H', 2280], ['s1', 'ECON150', 540], ['s3', 'BIO130', 3478], ['s2', 'BIO130', 540],
     ['s1', 'CHEM120', 1020], ['s2', 'ECON150', 720], ['s1', 'BIO130', 840]],
    1],
   [['s1', 4], ['s2', 2], ['s3', 2]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'MATH101H', 600], ['s5', 'MATH101', 780], ['s5', 'MATH101', 780]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
     ['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
     ['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
     ['s4', 'CHEM120', 3060]],
    1],
   [['s2', 2], ['s4', 2], ['s5', 3]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
  ('normal control 5',
   [[['s4', 'MATH101', 600], ['s4', 'MATH101H', 4919], ['s2', 'HIST140', 6479], ['s2', 'PHYS110', 6179],
     ['s2', 'MATH101', 600], ['s4', 'MATH101', 600], ['s2', 'BIO130', 1860], ['s4', 'HIST140', 3480],
     ['s2', 'CHEM120', 4740]],
    3],
   []),
  ('normal control 6',
   [[['s3', 'CHEM120', 600], ['s3', 'MATH101H', 7202], ['s3', 'HIST140', 5761], ['s1', 'MATH101H', 3420],
     ['s3', 'BIO130', 4320], ['s3', 'MATH101', 3480], ['s1', 'BIO130', 540]],
    3],
   []),
  ('normal control 7',
   [[['s5', 'ECON150', 1980], ['s5', 'CHEM120', 3000], ['s2', 'MATH101H', 2041], ['s2', 'HIST140', 2761],
     ['s2', 'BIO130', 600], ['s1', 'PHYS110', 540], ['s2', 'CHEM120', 3601], ['s1', 'HIST140', 1380],
     ['s5', 'MATH101H', 540], ['s5', 'PHYS110', 2280]],
    2],
   [['s5', 3]]),
  ('normal control 8',
   [[['s1', 'CHEM120', 5400], ['s2', 'PHYS110', 840], ['s4', 'HIST140', 540], ['s4', 'BIO130', 2520],
     ['s2', 'CHEM120', 540], ['s1', 'MATH101H', 540], ['s1', 'ECON150', 540], ['s1', 'BIO130', 2520],
     ['s2', 'MATH101', 2279], ['s1', 'MATH101', 1800], ['s4', 'MATH101', 1260]],
    3],
   [])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 600], ['s5', 'HIST140', 600], ['s5', 'MATH101H', 1440]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s4', 'BIO130', 540], ['s3', 'PHYS110', 840], ['s1', 'PHYS110', 1440], ['s3', 'CHEM120', 540],
     ['s1', 'MATH101', 1440], ['s4', 'PHYS110', 1380], ['s1', 'MATH101H', 1440], ['s3', 'ECON150', 1680],
     ['s3', 'CHEM120', 540], ['s1', 'ECON150', 600]],
    1],
   [['s1', 4], ['s3', 3], ['s4', 2]]),
  ('boundary control 3', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
  ('normal control 4',
   [[['s1', 'HIST140', 840], ['s4', 'MATH101H', 2280], ['s4', 'MATH101', 1440], ['s4', 'ECON150', 1440],
     ['s4', 'PHYS110', 600], ['s4', 'BIO130', 3721], ['s1', 'PHYS110', 540]],
    2],
   [['s4', 3]]),
  ('normal control 5',
   [[['s3', 'ECON150', 1860], ['s3', 'MATH101', 600], ['s5', 'MATH101', 3600], ['s5', 'BIO130', 3600],
     ['s5', 'MATH101H', 720], ['s5', 'MATH101', 3600], ['s5', 'ECON150', 540], ['s5', 'PHYS110', 5041],
     ['s3', 'PHYS110', 600]],
    3],
   []),
  ('normal control 6',
   [[['s2', 'BIO130', 3721], ['s2', 'CHEM120', 2881], ['s2', 'PHYS110', 600], ['s2', 'HIST140', 2041]], 2],
   []),
  ('normal control 7',
   [[['s5', 'HIST140', 780], ['s4', 'PHYS110', 600], ['s5', 'BIO130', 600], ['s4', 'MATH101', 2039],
     ['s5', 'PHYS110', 1500]],
    3],
   []),
  ('normal control 8', [[['s1', 'PHYS110', 600], ['s1', 'CHEM120', 1860]], 2], [])],
 [('regression: repeated exam rows 1',
   [[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
   []),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'MATH101', 3480], ['s3', 'MATH101H', 3780], ['s3', 'PHYS110', 600], ['s3', 'BIO130', 5040],
     ['s3', 'ECON150', 6479], ['s3', 'BIO130', 5040]],
    2],
   []),
  ('partial repair guard 3',
   [[['s5', 'HIST140', 540], ['s5', 'MATH101', 4859], ['s1', 'HIST140', 540], ['s1', 'ECON150', 1260],
     ['s5', 'ECON150', 3420], ['s1', 'MATH101H', 1260]],
    2],
   [['s1', 3]]),
  ('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
  ('normal control 5', [[['s4', 'HIST140', 1260], ['s4', 'CHEM120', 540], ['s4', 'MATH101H', 2520]], 1],
   [['s4', 2]]),
  ('normal control 6',
   [[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
     ['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('normal control 8',
   [[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
     ['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
     ['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
     ['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
    3],
   [['s4', 5]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 2760], ['s5', 'ECON150', 600], ['s5', 'MATH101', 1860], ['s5', 'CHEM120', 1860],
     ['s5', 'HIST140', 2760], ['s5', 'BIO130', 2580]],
    2],
   [['s5', 4]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'BIO130', 1979], ['s1', 'CHEM120', 540], ['s1', 'ECON150', 3418], ['s1', 'BIO130', 1979],
     ['s1', 'MATH101H', 4138]],
    2],
   []),
  ('partial repair guard 3',
   [[['s2', 'HIST140', 2039], ['s3', 'MATH101', 2279], ['s3', 'BIO130', 540], ['s2', 'HIST140', 2039],
     ['s3', 'HIST140', 3718], ['s2', 'MATH101', 2339], ['s1', 'PHYS110', 540], ['s3', 'ECON150', 4018],
     ['s1', 'MATH101', 2640], ['s2', 'BIO130', 600], ['s2', 'CHEM120', 2339], ['s1', 'ECON150', 3480],
     ['s1', 'HIST140', 1800], ['s3', 'MATH101H', 840]],
    1],
   [['s1', 2], ['s2', 3], ['s3', 2]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
  ('normal control 5',
   [[['s5', 'HIST140', 2821], ['s1', 'PHYS110', 600], ['s5', 'ECON150', 1981], ['s1', 'CHEM120', 2040],
     ['s3', 'CHEM120', 600], ['s3', 'MATH101H', 960], ['s5', 'MATH101H', 540], ['s3', 'BIO130', 780]],
    3],
   []),
  ('normal control 6',
   [[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
     ['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
     ['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
     ['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
    3],
   []),
  ('normal control 7',
   [[['s2', 'MATH101', 4500], ['s2', 'MATH101H', 3480], ['s4', 'PHYS110', 540], ['s4', 'CHEM120', 1980],
     ['s3', 'MATH101', 600], ['s3', 'PHYS110', 4561], ['s2', 'BIO130', 4320], ['s2', 'CHEM120', 2039],
     ['s3', 'MATH101H', 2881], ['s2', 'HIST140', 600], ['s3', 'ECON150', 3721], ['s3', 'CHEM120', 1440]],
    3],
   []),
  ('normal control 8',
   [[['s2', 'MATH101H', 600], ['s2', 'HIST140', 3780], ['s1', 'CHEM120', 1980], ['s1', 'PHYS110', 2160],
     ['s2', 'CHEM120', 600], ['s1', 'MATH101H', 2160], ['s3', 'MATH101', 540], ['s3', 'CHEM120', 3119],
     ['s3', 'HIST140', 840], ['s2', 'MATH101', 900], ['s1', 'BIO130', 540], ['s3', 'MATH101H', 2279],
     ['s3', 'BIO130', 4379]],
    3],
   [])]]
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 fixtureActualExpectedOutcome
regression: repeated exam rows 1[['s1', 3]][['s1', 2]]Failed
regression variant: repeated exam rows 2[['s3', 6]][['s3', 5]]Failed
partial repair guard 3[['s1', 3]][['s1', 3]]Passed
normal control 4[][]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[['s3', 3]][['s3', 3]]Passed
normal control 8[['s1', 4], ['s2', 2], ['s3', 2]][['s1', 4], ['s2', 2], ['s3', 2]]Passed

SHA-256 / 91dc316a850b251f59102e7408f3a591c1bd3b1380875a19d688b419877ca987

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(sits, limit):
    by = {}
    for st, ex, t in sits:
        by.setdefault(st, []).append(t)
    out = []
    for st in sorted(by):
        ts = sorted(set(by[st]))
        best = 0
        j = 0
        for i in range(len(ts)):
            while ts[i] - ts[j] >= 1440:
                j += 1
            best = max(best, i - j + 1)
        if best > limit:
            out.append([st, best])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeated exam rows 1', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1],
   [['s1', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'ECON150', 1560], ['s4', 'BIO130', 2221], ['s3', 'MATH101H', 1740], ['s3', 'CHEM120', 840],
     ['s2', 'CHEM120', 720], ['s2', 'MATH101H', 540], ['s4', 'HIST140', 600], ['s3', 'MATH101', 840],
     ['s4', 'PHYS110', 3662], ['s3', 'ECON150', 1560], ['s3', 'BIO130', 540], ['s4', 'MATH101', 2041]],
    2],
   [['s3', 5]]),
  ('partial repair guard 3',
   [[['s1', 'PHYS110', 540], ['s2', 'PHYS110', 900], ['s2', 'HIST140', 600], ['s1', 'ECON150', 1800],
     ['s1', 'CHEM120', 540]],
    2],
   [['s1', 3]]),
  ('normal control 4',
   [[['s2', 'BIO130', 540], ['s3', 'ECON150', 540], ['s2', 'MATH101', 1380], ['s3', 'MATH101H', 2100],
     ['s3', 'PHYS110', 1260]],
    3],
   []),
  ('normal control 5',
   [[['s3', 'MATH101H', 2041], ['s3', 'BIO130', 600], ['s3', 'PHYS110', 3301], ['s3', 'ECON150', 4561],
     ['s3', 'ECON150', 4561]],
    3],
   []),
  ('normal control 6',
   [[['s4', 'MATH101', 4680], ['s4', 'CHEM120', 540], ['s5', 'BIO130', 600], ['s5', 'CHEM120', 2040],
     ['s4', 'BIO130', 7381], ['s4', 'HIST140', 6121], ['s4', 'MATH101H', 1800], ['s4', 'MATH101', 4680]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'ECON150', 4861], ['s3', 'HIST140', 540], ['s1', 'PHYS110', 1981], ['s1', 'BIO130', 540],
     ['s3', 'CHEM120', 540], ['s3', 'MATH101', 1800], ['s1', 'MATH101H', 4861]],
    2],
   [['s3', 3]]),
  ('normal control 8',
   [[['s3', 'CHEM120', 2039], ['s1', 'PHYS110', 540], ['s3', 'MATH101H', 600], ['s1', 'MATH101H', 2280],
     ['s1', 'MATH101H', 2280], ['s1', 'ECON150', 540], ['s3', 'BIO130', 3478], ['s2', 'BIO130', 540],
     ['s1', 'CHEM120', 1020], ['s2', 'ECON150', 720], ['s1', 'BIO130', 840]],
    1],
   [['s1', 4], ['s2', 2], ['s3', 2]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'MATH101H', 600], ['s5', 'MATH101', 780], ['s5', 'MATH101', 780]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
     ['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
     ['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
     ['s4', 'CHEM120', 3060]],
    1],
   [['s2', 2], ['s4', 2], ['s5', 3]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
  ('normal control 5',
   [[['s4', 'MATH101', 600], ['s4', 'MATH101H', 4919], ['s2', 'HIST140', 6479], ['s2', 'PHYS110', 6179],
     ['s2', 'MATH101', 600], ['s4', 'MATH101', 600], ['s2', 'BIO130', 1860], ['s4', 'HIST140', 3480],
     ['s2', 'CHEM120', 4740]],
    3],
   []),
  ('normal control 6',
   [[['s3', 'CHEM120', 600], ['s3', 'MATH101H', 7202], ['s3', 'HIST140', 5761], ['s1', 'MATH101H', 3420],
     ['s3', 'BIO130', 4320], ['s3', 'MATH101', 3480], ['s1', 'BIO130', 540]],
    3],
   []),
  ('normal control 7',
   [[['s5', 'ECON150', 1980], ['s5', 'CHEM120', 3000], ['s2', 'MATH101H', 2041], ['s2', 'HIST140', 2761],
     ['s2', 'BIO130', 600], ['s1', 'PHYS110', 540], ['s2', 'CHEM120', 3601], ['s1', 'HIST140', 1380],
     ['s5', 'MATH101H', 540], ['s5', 'PHYS110', 2280]],
    2],
   [['s5', 3]]),
  ('normal control 8',
   [[['s1', 'CHEM120', 5400], ['s2', 'PHYS110', 840], ['s4', 'HIST140', 540], ['s4', 'BIO130', 2520],
     ['s2', 'CHEM120', 540], ['s1', 'MATH101H', 540], ['s1', 'ECON150', 540], ['s1', 'BIO130', 2520],
     ['s2', 'MATH101', 2279], ['s1', 'MATH101', 1800], ['s4', 'MATH101', 1260]],
    3],
   [])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 600], ['s5', 'HIST140', 600], ['s5', 'MATH101H', 1440]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s4', 'BIO130', 540], ['s3', 'PHYS110', 840], ['s1', 'PHYS110', 1440], ['s3', 'CHEM120', 540],
     ['s1', 'MATH101', 1440], ['s4', 'PHYS110', 1380], ['s1', 'MATH101H', 1440], ['s3', 'ECON150', 1680],
     ['s3', 'CHEM120', 540], ['s1', 'ECON150', 600]],
    1],
   [['s1', 4], ['s3', 3], ['s4', 2]]),
  ('boundary control 3', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
  ('normal control 4',
   [[['s1', 'HIST140', 840], ['s4', 'MATH101H', 2280], ['s4', 'MATH101', 1440], ['s4', 'ECON150', 1440],
     ['s4', 'PHYS110', 600], ['s4', 'BIO130', 3721], ['s1', 'PHYS110', 540]],
    2],
   [['s4', 3]]),
  ('normal control 5',
   [[['s3', 'ECON150', 1860], ['s3', 'MATH101', 600], ['s5', 'MATH101', 3600], ['s5', 'BIO130', 3600],
     ['s5', 'MATH101H', 720], ['s5', 'MATH101', 3600], ['s5', 'ECON150', 540], ['s5', 'PHYS110', 5041],
     ['s3', 'PHYS110', 600]],
    3],
   []),
  ('normal control 6',
   [[['s2', 'BIO130', 3721], ['s2', 'CHEM120', 2881], ['s2', 'PHYS110', 600], ['s2', 'HIST140', 2041]], 2],
   []),
  ('normal control 7',
   [[['s5', 'HIST140', 780], ['s4', 'PHYS110', 600], ['s5', 'BIO130', 600], ['s4', 'MATH101', 2039],
     ['s5', 'PHYS110', 1500]],
    3],
   []),
  ('normal control 8', [[['s1', 'PHYS110', 600], ['s1', 'CHEM120', 1860]], 2], [])],
 [('regression: repeated exam rows 1',
   [[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
   []),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'MATH101', 3480], ['s3', 'MATH101H', 3780], ['s3', 'PHYS110', 600], ['s3', 'BIO130', 5040],
     ['s3', 'ECON150', 6479], ['s3', 'BIO130', 5040]],
    2],
   []),
  ('partial repair guard 3',
   [[['s5', 'HIST140', 540], ['s5', 'MATH101', 4859], ['s1', 'HIST140', 540], ['s1', 'ECON150', 1260],
     ['s5', 'ECON150', 3420], ['s1', 'MATH101H', 1260]],
    2],
   [['s1', 3]]),
  ('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
  ('normal control 5', [[['s4', 'HIST140', 1260], ['s4', 'CHEM120', 540], ['s4', 'MATH101H', 2520]], 1],
   [['s4', 2]]),
  ('normal control 6',
   [[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
     ['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('normal control 8',
   [[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
     ['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
     ['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
     ['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
    3],
   [['s4', 5]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 2760], ['s5', 'ECON150', 600], ['s5', 'MATH101', 1860], ['s5', 'CHEM120', 1860],
     ['s5', 'HIST140', 2760], ['s5', 'BIO130', 2580]],
    2],
   [['s5', 4]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'BIO130', 1979], ['s1', 'CHEM120', 540], ['s1', 'ECON150', 3418], ['s1', 'BIO130', 1979],
     ['s1', 'MATH101H', 4138]],
    2],
   []),
  ('partial repair guard 3',
   [[['s2', 'HIST140', 2039], ['s3', 'MATH101', 2279], ['s3', 'BIO130', 540], ['s2', 'HIST140', 2039],
     ['s3', 'HIST140', 3718], ['s2', 'MATH101', 2339], ['s1', 'PHYS110', 540], ['s3', 'ECON150', 4018],
     ['s1', 'MATH101', 2640], ['s2', 'BIO130', 600], ['s2', 'CHEM120', 2339], ['s1', 'ECON150', 3480],
     ['s1', 'HIST140', 1800], ['s3', 'MATH101H', 840]],
    1],
   [['s1', 2], ['s2', 3], ['s3', 2]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
  ('normal control 5',
   [[['s5', 'HIST140', 2821], ['s1', 'PHYS110', 600], ['s5', 'ECON150', 1981], ['s1', 'CHEM120', 2040],
     ['s3', 'CHEM120', 600], ['s3', 'MATH101H', 960], ['s5', 'MATH101H', 540], ['s3', 'BIO130', 780]],
    3],
   []),
  ('normal control 6',
   [[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
     ['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
     ['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
     ['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
    3],
   []),
  ('normal control 7',
   [[['s2', 'MATH101', 4500], ['s2', 'MATH101H', 3480], ['s4', 'PHYS110', 540], ['s4', 'CHEM120', 1980],
     ['s3', 'MATH101', 600], ['s3', 'PHYS110', 4561], ['s2', 'BIO130', 4320], ['s2', 'CHEM120', 2039],
     ['s3', 'MATH101H', 2881], ['s2', 'HIST140', 600], ['s3', 'ECON150', 3721], ['s3', 'CHEM120', 1440]],
    3],
   []),
  ('normal control 8',
   [[['s2', 'MATH101H', 600], ['s2', 'HIST140', 3780], ['s1', 'CHEM120', 1980], ['s1', 'PHYS110', 2160],
     ['s2', 'CHEM120', 600], ['s1', 'MATH101H', 2160], ['s3', 'MATH101', 540], ['s3', 'CHEM120', 3119],
     ['s3', 'HIST140', 840], ['s2', 'MATH101', 900], ['s1', 'BIO130', 540], ['s3', 'MATH101H', 2279],
     ['s3', 'BIO130', 4379]],
    3],
   [])]]
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 fixtureActualExpectedOutcome
regression: repeated exam rows 1[['s1', 2]][['s1', 2]]Passed
regression variant: repeated exam rows 2[['s3', 4]][['s3', 5]]Failed
partial repair guard 3[][['s1', 3]]Failed
normal control 4[][]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[][['s3', 3]]Failed
normal control 8[['s1', 3], ['s2', 2], ['s3', 2]][['s1', 4], ['s2', 2], ['s3', 2]]Failed

SHA-256 / 22ae4c3cb1399cde4f25e470546d0271be92fab74fbd3c95f28ae2ca5a259ad9

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(sits, limit):
    by = {}
    for st, ex, t in sits:
        by.setdefault(st, {})[ex] = t
    out = []
    for st in sorted(by):
        ts = sorted(by[st].values())
        best = 0
        j = 0
        for i in range(len(ts)):
            while ts[i] - ts[j] >= 1440:
                j += 1
            best = max(best, i - j + 1)
        if best > limit:
            out.append([st, best])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeated exam rows 1', [[['s1', 'A', 600], ['s1', 'A', 600], ['s1', 'B', 900]], 1],
   [['s1', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'ECON150', 1560], ['s4', 'BIO130', 2221], ['s3', 'MATH101H', 1740], ['s3', 'CHEM120', 840],
     ['s2', 'CHEM120', 720], ['s2', 'MATH101H', 540], ['s4', 'HIST140', 600], ['s3', 'MATH101', 840],
     ['s4', 'PHYS110', 3662], ['s3', 'ECON150', 1560], ['s3', 'BIO130', 540], ['s4', 'MATH101', 2041]],
    2],
   [['s3', 5]]),
  ('partial repair guard 3',
   [[['s1', 'PHYS110', 540], ['s2', 'PHYS110', 900], ['s2', 'HIST140', 600], ['s1', 'ECON150', 1800],
     ['s1', 'CHEM120', 540]],
    2],
   [['s1', 3]]),
  ('normal control 4',
   [[['s2', 'BIO130', 540], ['s3', 'ECON150', 540], ['s2', 'MATH101', 1380], ['s3', 'MATH101H', 2100],
     ['s3', 'PHYS110', 1260]],
    3],
   []),
  ('normal control 5',
   [[['s3', 'MATH101H', 2041], ['s3', 'BIO130', 600], ['s3', 'PHYS110', 3301], ['s3', 'ECON150', 4561],
     ['s3', 'ECON150', 4561]],
    3],
   []),
  ('normal control 6',
   [[['s4', 'MATH101', 4680], ['s4', 'CHEM120', 540], ['s5', 'BIO130', 600], ['s5', 'CHEM120', 2040],
     ['s4', 'BIO130', 7381], ['s4', 'HIST140', 6121], ['s4', 'MATH101H', 1800], ['s4', 'MATH101', 4680]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'ECON150', 4861], ['s3', 'HIST140', 540], ['s1', 'PHYS110', 1981], ['s1', 'BIO130', 540],
     ['s3', 'CHEM120', 540], ['s3', 'MATH101', 1800], ['s1', 'MATH101H', 4861]],
    2],
   [['s3', 3]]),
  ('normal control 8',
   [[['s3', 'CHEM120', 2039], ['s1', 'PHYS110', 540], ['s3', 'MATH101H', 600], ['s1', 'MATH101H', 2280],
     ['s1', 'MATH101H', 2280], ['s1', 'ECON150', 540], ['s3', 'BIO130', 3478], ['s2', 'BIO130', 540],
     ['s1', 'CHEM120', 1020], ['s2', 'ECON150', 720], ['s1', 'BIO130', 840]],
    1],
   [['s1', 4], ['s2', 2], ['s3', 2]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'MATH101H', 600], ['s5', 'MATH101', 780], ['s5', 'MATH101', 780]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110', 1800], ['s2', 'HIST140', 1860], ['s5', 'MATH101', 3240], ['s2', 'ECON150', 600],
     ['s5', 'HIST140', 3240], ['s2', 'CHEM120', 2160], ['s5', 'MATH101H', 1800], ['s5', 'CHEM120', 1800],
     ['s4', 'BIO130', 540], ['s2', 'BIO130', 3420], ['s5', 'BIO130', 540], ['s4', 'CHEM120', 3060],
     ['s4', 'CHEM120', 3060]],
    1],
   [['s2', 2], ['s4', 2], ['s5', 3]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1979], ['s1', 'C', 1990]], 2], []),
  ('normal control 5',
   [[['s4', 'MATH101', 600], ['s4', 'MATH101H', 4919], ['s2', 'HIST140', 6479], ['s2', 'PHYS110', 6179],
     ['s2', 'MATH101', 600], ['s4', 'MATH101', 600], ['s2', 'BIO130', 1860], ['s4', 'HIST140', 3480],
     ['s2', 'CHEM120', 4740]],
    3],
   []),
  ('normal control 6',
   [[['s3', 'CHEM120', 600], ['s3', 'MATH101H', 7202], ['s3', 'HIST140', 5761], ['s1', 'MATH101H', 3420],
     ['s3', 'BIO130', 4320], ['s3', 'MATH101', 3480], ['s1', 'BIO130', 540]],
    3],
   []),
  ('normal control 7',
   [[['s5', 'ECON150', 1980], ['s5', 'CHEM120', 3000], ['s2', 'MATH101H', 2041], ['s2', 'HIST140', 2761],
     ['s2', 'BIO130', 600], ['s1', 'PHYS110', 540], ['s2', 'CHEM120', 3601], ['s1', 'HIST140', 1380],
     ['s5', 'MATH101H', 540], ['s5', 'PHYS110', 2280]],
    2],
   [['s5', 3]]),
  ('normal control 8',
   [[['s1', 'CHEM120', 5400], ['s2', 'PHYS110', 840], ['s4', 'HIST140', 540], ['s4', 'BIO130', 2520],
     ['s2', 'CHEM120', 540], ['s1', 'MATH101H', 540], ['s1', 'ECON150', 540], ['s1', 'BIO130', 2520],
     ['s2', 'MATH101', 2279], ['s1', 'MATH101', 1800], ['s4', 'MATH101', 1260]],
    3],
   [])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 600], ['s5', 'HIST140', 600], ['s5', 'MATH101H', 1440]], 1], [['s5', 2]]),
  ('regression variant: repeated exam rows 2',
   [[['s4', 'BIO130', 540], ['s3', 'PHYS110', 840], ['s1', 'PHYS110', 1440], ['s3', 'CHEM120', 540],
     ['s1', 'MATH101', 1440], ['s4', 'PHYS110', 1380], ['s1', 'MATH101H', 1440], ['s3', 'ECON150', 1680],
     ['s3', 'CHEM120', 540], ['s1', 'ECON150', 600]],
    1],
   [['s1', 4], ['s3', 3], ['s4', 2]]),
  ('boundary control 3', [[['s1', 'A', 600], ['s1', 'B', 600], ['s1', 'C', 900]], 2], [['s1', 3]]),
  ('normal control 4',
   [[['s1', 'HIST140', 840], ['s4', 'MATH101H', 2280], ['s4', 'MATH101', 1440], ['s4', 'ECON150', 1440],
     ['s4', 'PHYS110', 600], ['s4', 'BIO130', 3721], ['s1', 'PHYS110', 540]],
    2],
   [['s4', 3]]),
  ('normal control 5',
   [[['s3', 'ECON150', 1860], ['s3', 'MATH101', 600], ['s5', 'MATH101', 3600], ['s5', 'BIO130', 3600],
     ['s5', 'MATH101H', 720], ['s5', 'MATH101', 3600], ['s5', 'ECON150', 540], ['s5', 'PHYS110', 5041],
     ['s3', 'PHYS110', 600]],
    3],
   []),
  ('normal control 6',
   [[['s2', 'BIO130', 3721], ['s2', 'CHEM120', 2881], ['s2', 'PHYS110', 600], ['s2', 'HIST140', 2041]], 2],
   []),
  ('normal control 7',
   [[['s5', 'HIST140', 780], ['s4', 'PHYS110', 600], ['s5', 'BIO130', 600], ['s4', 'MATH101', 2039],
     ['s5', 'PHYS110', 1500]],
    3],
   []),
  ('normal control 8', [[['s1', 'PHYS110', 600], ['s1', 'CHEM120', 1860]], 2], [])],
 [('regression: repeated exam rows 1',
   [[['s3', 'HIST140', 2039], ['s3', 'BIO130', 600], ['s3', 'HIST140', 2039], ['s3', 'MATH101', 3299]], 2],
   []),
  ('regression variant: repeated exam rows 2',
   [[['s3', 'MATH101', 3480], ['s3', 'MATH101H', 3780], ['s3', 'PHYS110', 600], ['s3', 'BIO130', 5040],
     ['s3', 'ECON150', 6479], ['s3', 'BIO130', 5040]],
    2],
   []),
  ('partial repair guard 3',
   [[['s5', 'HIST140', 540], ['s5', 'MATH101', 4859], ['s1', 'HIST140', 540], ['s1', 'ECON150', 1260],
     ['s5', 'ECON150', 3420], ['s1', 'MATH101H', 1260]],
    2],
   [['s1', 3]]),
  ('boundary control 4', [[['s1', 'A', 1300], ['s1', 'B', 1500], ['s1', 'C', 1600]], 2], [['s1', 3]]),
  ('normal control 5', [[['s4', 'HIST140', 1260], ['s4', 'CHEM120', 540], ['s4', 'MATH101H', 2520]], 1],
   [['s4', 2]]),
  ('normal control 6',
   [[['s2', 'MATH101', 4259], ['s2', 'ECON150', 540], ['s5', 'BIO130', 2760], ['s2', 'CHEM120', 1979],
     ['s2', 'BIO130', 5700], ['s5', 'CHEM120', 600], ['s5', 'MATH101H', 1320], ['s2', 'MATH101H', 2819]],
    2],
   []),
  ('normal control 7',
   [[['s1', 'PHYS110', 600], ['s4', 'MATH101', 600], ['s4', 'ECON150', 3480], ['s4', 'HIST140', 2040],
     ['s2', 'MATH101', 1860], ['s1', 'ECON150', 900], ['s2', 'HIST140', 4740], ['s2', 'ECON150', 600],
     ['s2', 'MATH101', 1860], ['s4', 'MATH101H', 2220]],
    1],
   [['s1', 2], ['s2', 2], ['s4', 2]]),
  ('normal control 8',
   [[['s1', 'MATH101', 600], ['s4', 'ECON150', 540], ['s1', 'HIST140', 2760], ['s1', 'BIO130', 1320],
     ['s4', 'HIST140', 540], ['s1', 'CHEM120', 4200], ['s4', 'MATH101H', 1560], ['s4', 'PHYS110', 840],
     ['s4', 'CHEM120', 840], ['s3', 'HIST140', 540], ['s3', 'MATH101H', 3240], ['s3', 'PHYS110', 1980],
     ['s3', 'BIO130', 1800], ['s1', 'ECON150', 3480]],
    3],
   [['s4', 5]])],
 [('regression: repeated exam rows 1',
   [[['s5', 'HIST140', 2760], ['s5', 'ECON150', 600], ['s5', 'MATH101', 1860], ['s5', 'CHEM120', 1860],
     ['s5', 'HIST140', 2760], ['s5', 'BIO130', 2580]],
    2],
   [['s5', 4]]),
  ('regression variant: repeated exam rows 2',
   [[['s1', 'BIO130', 1979], ['s1', 'CHEM120', 540], ['s1', 'ECON150', 3418], ['s1', 'BIO130', 1979],
     ['s1', 'MATH101H', 4138]],
    2],
   []),
  ('partial repair guard 3',
   [[['s2', 'HIST140', 2039], ['s3', 'MATH101', 2279], ['s3', 'BIO130', 540], ['s2', 'HIST140', 2039],
     ['s3', 'HIST140', 3718], ['s2', 'MATH101', 2339], ['s1', 'PHYS110', 540], ['s3', 'ECON150', 4018],
     ['s1', 'MATH101', 2640], ['s2', 'BIO130', 600], ['s2', 'CHEM120', 2339], ['s1', 'ECON150', 3480],
     ['s1', 'HIST140', 1800], ['s3', 'MATH101H', 840]],
    1],
   [['s1', 2], ['s2', 3], ['s3', 2]]),
  ('boundary control 4', [[['s1', 'A', 540], ['s1', 'B', 1980], ['s1', 'C', 2000]], 2], []),
  ('normal control 5',
   [[['s5', 'HIST140', 2821], ['s1', 'PHYS110', 600], ['s5', 'ECON150', 1981], ['s1', 'CHEM120', 2040],
     ['s3', 'CHEM120', 600], ['s3', 'MATH101H', 960], ['s5', 'MATH101H', 540], ['s3', 'BIO130', 780]],
    3],
   []),
  ('normal control 6',
   [[['s5', 'PHYS110', 6181], ['s5', 'MATH101', 600], ['s2', 'MATH101H', 540], ['s2', 'ECON150', 4680],
     ['s4', 'MATH101', 5099], ['s5', 'ECON150', 2041], ['s2', 'MATH101', 3420], ['s4', 'ECON150', 3660],
     ['s4', 'MATH101H', 6540], ['s5', 'BIO130', 4921], ['s4', 'PHYS110', 3480], ['s5', 'CHEM120', 2041],
     ['s4', 'CHEM120', 600], ['s2', 'HIST140', 6420], ['s2', 'CHEM120', 6120]],
    3],
   []),
  ('normal control 7',
   [[['s2', 'MATH101', 4500], ['s2', 'MATH101H', 3480], ['s4', 'PHYS110', 540], ['s4', 'CHEM120', 1980],
     ['s3', 'MATH101', 600], ['s3', 'PHYS110', 4561], ['s2', 'BIO130', 4320], ['s2', 'CHEM120', 2039],
     ['s3', 'MATH101H', 2881], ['s2', 'HIST140', 600], ['s3', 'ECON150', 3721], ['s3', 'CHEM120', 1440]],
    3],
   []),
  ('normal control 8',
   [[['s2', 'MATH101H', 600], ['s2', 'HIST140', 3780], ['s1', 'CHEM120', 1980], ['s1', 'PHYS110', 2160],
     ['s2', 'CHEM120', 600], ['s1', 'MATH101H', 2160], ['s3', 'MATH101', 540], ['s3', 'CHEM120', 3119],
     ['s3', 'HIST140', 840], ['s2', 'MATH101', 900], ['s1', 'BIO130', 540], ['s3', 'MATH101H', 2279],
     ['s3', 'BIO130', 4379]],
    3],
   [])]]
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 fixtureActualExpectedOutcome
regression: repeated exam rows 1[['s1', 2]][['s1', 2]]Passed
regression variant: repeated exam rows 2[['s3', 5]][['s3', 5]]Passed
partial repair guard 3[['s1', 3]][['s1', 3]]Passed
normal control 4[][]Passed
normal control 5[][]Passed
normal control 6[][]Passed
normal control 7[['s3', 3]][['s3', 3]]Passed
normal control 8[['s1', 4], ['s2', 2], ['s3', 2]][['s1', 4], ['s2', 2], ['s3', 2]]Passed

SHA-256 / 20dbe5739d64f43484877ecfea82dbaacd052f842c879f5f34b1ebd2fec25b9c

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:05.181007+00:00.

Case digest / 3d844c1dfa14d0939d9c48149f7b0227f509ed3710a68d9cbae0710f9c29d583