broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if used+h>capacity:
            pages.append(page); page=[]; used=0
        page.append({'id':row['id'],'height':h,'overflow':h>capacity})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if len(page)>1 and used+h>capacity:
            pages.append(page); page=[]; used=0
        page.append({'id':row['id'],'height':h,'overflow':h>capacity})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

prompt:
The table oversized first row result violates the stipulated printed table page partition contract.

Print pages reserve header/footer height, pack whole row/detail blocks in order, allow exact fits, place oversized rows alone with an overflow marker, never generate empty pages, number from one, and repeat headers only when requested.

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if page and used+h>capacity:
            pages.append(page); page=[]; used=used
        page.append({'id':row['id'],'height':h,'overflow':h>capacity})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

meaning: Fixture-count band, not measured model difficulty

deps: stdlib

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if page and used+h>capacity:
            pages.append(page); page=[]; used=header
        page.append({'id':row['id'],'height':h,'overflow':h>capacity})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

prompt:
The table page height reset result violates the stipulated printed table page partition contract.

Print pages reserve header/footer height, pack whole row/detail blocks in order, allow exact fits, place oversized rows alone with an overflow marker, never generate empty pages, number from one, and repeat headers only when requested.

split: open-access


broken_source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if page and used+h>capacity:
            pages.append(page); page=[]; used=0
        page.append({'id':row['id'],'height':h,'overflow':h>=capacity})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

source:
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(rows, header, footer, page_height, repeat, keep_detail):
    capacity=page_height-header-footer
    if capacity<=0: return {'error':'no-body-space','pages':[]}
    pages=[]; page=[]; used=0
    for row in rows:
        h=row['height']+(row.get('detail_height',0) if keep_detail else 0)
        if page and used+h>capacity:
            pages.append(page); page=[]; used=0
        page.append({'id':row['id'],'height':h,'overflow':False})
        used+=h
    if page: pages.append(page)
    return {'error':None,'pages':[{'number':i+1,'header':repeat or i==0,'footer':True,'rows':p,'used':sum(r['height'] for r in p),'body_limit':capacity} for i,p in enumerate(pages)]}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
if N == 1:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':1+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 2, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 4, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 2:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':2+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 3, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 5, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 3:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':3+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 4, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 4:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':4+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 5, 'overflow': False}, {'id': 'd', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

if N == 5:
    check('exactly filled body', solve([{'id':'a','height':3},{'id':'b','height':4},{'id':'c','height':5+1},{'id':'d','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 4, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'c', 'height': 6, 'overflow': False}], 'used': 6, 'body_limit': 7}, {'number': 3, 'header': False, 'footer': True, 'rows': [{'id': 'd', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('oversized row', solve([{'id':'a','height':11},{'id':'b','height':2}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 11, 'overflow': True}], 'used': 11, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 2, 'overflow': False}], 'used': 2, 'body_limit': 7}]})
    check('detail blocks', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, True), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}, {'number': 2, 'header': True, 'footer': True, 'rows': [{'id': 'b', 'height': 7, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('detail excluded', solve([{'id':'a','height':3,'detail_height':4},{'id':'b','height':3,'detail_height':4}], 2, 1, 10, True, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}, {'id': 'b', 'height': 3, 'overflow': False}], 'used': 6, 'body_limit': 7}]})
    check('zero body', solve([{'id':'a','height':1}], 2, 1, 3, True, False), {'error': 'no-body-space', 'pages': []})
    check('negative body', solve([], 2, 2, 3, False, False), {'error': 'no-body-space', 'pages': []})
    check('nonexact overflow', solve([{'id':'a','height':4},{'id':'b','height':4},{'id':'c','height':3}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 4, 'overflow': False}], 'used': 4, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 4, 'overflow': False}, {'id': 'c', 'height': 3, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('reset capacity', solve([{'id':'a','height':3},{'id':'b','height':5},{'id':'c','height':2}], 2, 1, 10, False, False), {'error': None, 'pages': [{'number': 1, 'header': True, 'footer': True, 'rows': [{'id': 'a', 'height': 3, 'overflow': False}], 'used': 3, 'body_limit': 7}, {'number': 2, 'header': False, 'footer': True, 'rows': [{'id': 'b', 'height': 5, 'overflow': False}, {'id': 'c', 'height': 2, 'overflow': False}], 'used': 7, 'body_limit': 7}]})
    check('empty print', solve([], 2, 1, 10, False, False), {'error': None, 'pages': []})

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)

prompt:
The table overflow marker result violates the stipulated printed table page partition contract.

Print pages reserve header/footer height, pack whole row/detail blocks in order, allow exact fits, place oversized rows alone with an overflow marker, never generate empty pages, number from one, and repeat headers only when requested.

split: open-access