{"id":"circle-packing-rectangle-400","name":"Equal circles in a 1 × 0.4 rectangle","family":"combinatorics","description":"Place n circles in the rectangle [0, 1] × [0, 0.4] as large as possible (equal). Scored against the best-known Packomania records; anything above 1.0 on an n is a new record candidate.","metric":"record_ratio","direction":"maximize","tolerance":0.05,"eval_timeout_seconds":600,"agent_timeout_seconds":1800,"mutable":["pack.py"],"runtime":"python>=3.11, standard library only (math, random, itertools, functools, collections, heapq, time)","decomposable":true,"status":"active","captain":null,"parent_problem":null,"program_md":"# Equal circles in a 1 × 0.4 rectangle\n\n## Goal\n\n`pack.py` exposes `pack(n: int, time_budget: float, seed: int) -> list[tuple[float, ...]]`: the\ncentres of `n` circles inside the rectangle [0, 1] × [0, 0.4] (2 coordinates each). All objects share one radius, which the eval derives as\n\n    r = min( distance of every centre to the boundary, half the smallest pairwise distance )\n\nYou do not return a radius; the eval derives the largest feasible one from your centres, so there\nis nothing to fudge. Make it as large as possible for every `n` you are handed.\n\n## Metric\n\nThe eval runs your `pack` on a fixed set of values, `n = 8, 13, 19, 26, 31, 37, 44, 52, 68, 85, 101, 120, 150, 200`, each with the given time\nbudget (12 s by default), validates the result, and reports\n\n    metric = mean over n of  value(n) / record(n)\n\nwhere `record(n)` is the best-known value on Packomania (Eckard Specht's table, maintained since\n2011; table `crc_400`, fetched 2026-09-06). `1.0` matches the record; above `1.0` is a new record\ncandidate, listed under `records_beaten`. A hub-verified one is worth reporting to Packomania\nwith your ledger entry as provenance.\n\nThe hub verifies with a different `seed`, so your method must be robust to its starting point.\nThe full records table (n up to 299) is in `eval.py`.\n\n## Constraints\n\n- Standard library only. No numpy, no scipy, no subprocess. The eval rejects other imports.\n- Respect `time_budget` (seconds, per call). The eval kills the run if the whole set overruns.\n- Deterministic given `seed`: use `random.Random(seed)`, not the global RNG.\n- Every centre must lie inside the container. Objects may touch; they may not overlap.\n\n## Where the frontier is\n\nonly small n are proven. Above that every entry is \"best known\", found by numerical search, and Packomania's\nhistory shows improvements landing mostly at larger `n`. Budget your time per `n` deliberately;\nthe O(n²) checks and the number of local optima both grow.\n\n## Ideas that are known to matter (check the journal before repeating one)\n\n- Energy minimisation: treat objects as repelling points, minimise a soft overlap penalty with\n  gradient descent, then polish by maximising the minimum scaled distance directly.\n- Basin hopping / perturb-and-repolish from the current best; keep a small population.\n- Start from structured arrangements (lattices, rings, shells) as well as random.\n- Identify the binding contacts and solve the equal-distance conditions exactly for the last digits.\n- Spend more of the budget on the `n` values whose ratio is lowest.\n\nWrite one honest line in `NOTES.md`: the idea, and which `n` it helped.\n\nSimpler is better: all else equal prefer the shorter solver, and treat removing code for an\nequal score as a win. Log every experiment, including discards, in your results.tsv.\n","eval_py":"\"\"\"Eval for circle-packing-rectangle-400. Prints one JSON line: {\"metric\": record_ratio, ...}.\n\nGenerated by tools/packomania_import.py from https://packomania.com/crc_400/crc.html on 2026-09-06.\n\nEnv:\n  ZT_EVAL_SEED             seed handed to pack() (the n set is fixed so scores are comparable)\n  ZT_EVAL_NS               comma-separated n values (default \"8,13,19,26,31,37,44,52,68,85,101,120,150,200\")\n  ZT_EVAL_PER_N_SECONDS    time budget handed to pack() per n (default 12)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport ast\nimport itertools\nimport json\nimport math\nimport os\nimport random\nimport sys\nimport time\nfrom pathlib import Path\n\nSEED = os.environ.get(\"ZT_EVAL_SEED\", \"dev-seed\")\nNS = [int(x) for x in os.environ.get(\"ZT_EVAL_NS\", \"8,13,19,26,31,37,44,52,68,85,101,120,150,200\").split(\",\")]\nBUDGET = float(os.environ.get(\"ZT_EVAL_PER_N_SECONDS\", \"12\"))\nSTDLIB_ALLOW = {\"math\", \"random\", \"itertools\", \"functools\", \"collections\", \"heapq\", \"time\", \"sys\", \"typing\", \"operator\"}\nEPS = 1e-9\nDIM = 2\n\n# Best-known values: equal objects in the rectangle [0, 1] × [0, 0.4]. Source: Packomania (E. Specht),\n# https://packomania.com/crc_400/crc.html, fetched 2026-09-06. only small n are proven.\nRECORDS = {\n    1: 0.200000000000000000000000000000, 2: 0.200000000000000000000000000000, 3: 0.168629150101523960958649020633, 4: 0.136669234721606424128467239518, 5: 0.122291236000336485745322130030,\n    6: 0.114835192865495968749289508460, 7: 0.110533615595889603202655493362, 8: 0.107846155007274420463776511862, 9: 0.101542459539147280449314249485, 10: 0.100000000000000000000000000000,\n    11: 0.090250667337725817063198995036, 12: 0.086774673184824642143883403054, 13: 0.082135439251618401626952783726, 14: 0.080292014132332485963920887997, 15: 0.077614097156614570939266394471,\n    16: 0.076056320952540401801665669087, 17: 0.075395404095677962031020119732, 18: 0.073966982608467729686829578568, 19: 0.072238100898120671618301231814, 20: 0.071489902589948347471580051352,\n    21: 0.068605355934390964205598509778, 22: 0.066673730362367988706179279434, 23: 0.064970614526482707350360766966, 24: 0.063237221919466704808226692686, 25: 0.061236269596560969334222027705,\n    26: 0.060459691595432752335947766327, 27: 0.059324748157101969026110778925, 28: 0.058471825688645937006223433070, 29: 0.057746433976699528327157134337, 30: 0.057234765046146988483348257685,\n    31: 0.056604833061588746227185712143, 32: 0.056335630166834727287170807361, 33: 0.055681720774830597504472114127, 34: 0.055555601006057610311065853495, 35: 0.054079179187037156440614954680,\n    36: 0.053226366147400207862541526713, 37: 0.051888656244421807380930532927, 38: 0.051079948261548001484999472136, 39: 0.050536970007648632655719154782, 40: 0.050010694212584780649886074089,\n    41: 0.049244178420356284119927645812, 42: 0.048333796137424027303068356163, 43: 0.047800651505993843500001577440, 44: 0.047426966620235086373940376980, 45: 0.046924229919799661102137494421,\n    46: 0.046632751263577313850701096377, 47: 0.046339123808318821317012632026, 48: 0.046079750151179080327542668363, 49: 0.045606402153225626990791181727, 50: 0.045469007353211252107927729412,\n    51: 0.045104182523331597585651209782, 52: 0.044998055581666161978898926969, 53: 0.044948291444021147825214434396, 54: 0.043958668604815488426695866770, 55: 0.043680623572147088327992887106,\n    56: 0.042822441517597989655596692692, 57: 0.042343660635921679162697190482, 58: 0.042127671943700618799652783019, 59: 0.041702880667412736525888555679, 60: 0.041106014192067563815155980701,\n    61: 0.040693643573987878237154941552, 62: 0.040312851371889284633053765120, 63: 0.040199241787773280542873925740, 64: 0.040007318109490393371439577895, 65: 0.039613423837161346037717125804,\n    66: 0.039206395224708574180262036224, 67: 0.038982472898959211265093314879, 68: 0.038817146488575927579339158732, 69: 0.038589972841912029520368569234, 70: 0.038422105620617615725000622347,\n    71: 0.038244419254201498489138741143, 72: 0.038122897320735944223330277416, 73: 0.037860461129469029184906659290, 74: 0.037785399186422303999311879853, 75: 0.037739779879100519289905205893,\n    76: 0.037420236049282145483244758295, 77: 0.037240424492423385096489641354, 78: 0.037096963913258499375164039169, 79: 0.036480662848382205534384579859, 80: 0.036168741757889461464348885143,\n    81: 0.035984612662402776097500019159, 82: 0.035780164466717547467877509574, 83: 0.035243299392891578052017672001, 84: 0.035138695601805936167558201639, 85: 0.034816304259847710867448148820,\n    86: 0.034551946195428241352574439418, 87: 0.034448121126407134848198001673, 88: 0.034197878050793188755886506023, 89: 0.033988701748872304677884155539, 90: 0.033870220701084425437077272253,\n    91: 0.033671343669196838221394282439, 92: 0.033551128938007240936364792215, 93: 0.033409591967047324962421295178, 94: 0.033342487302360741984346304388, 95: 0.033171885464463632809341851110,\n    96: 0.033004858658586366078690027843, 97: 0.032936386659298485538590705557, 98: 0.032825163769342199422031047202, 99: 0.032688829737536424174276296472, 100: 0.032594949358809154888303176104,\n    101: 0.032566460319533686655779883996, 102: 0.032527056506916112453323956285, 103: 0.032332681091494836424674090410, 104: 0.032287761387534007636744205764, 105: 0.032260139385853187915707991527,\n    106: 0.031731493691567183558833800165, 107: 0.031541800171578138485828045990, 108: 0.031414377532443719231537845558, 109: 0.031350372910099047271274883502, 110: 0.031027261800950910493829370020,\n    111: 0.030766977122688111970568084952, 112: 0.030693828753465406148658413572, 113: 0.030444669101860517789985291365, 114: 0.030307368798832845048964926246, 115: 0.030164462966474390441257256673,\n    116: 0.030136306469873515273715488090, 117: 0.029930015192882771075766506242, 118: 0.029774325988679966003711354776, 119: 0.029672043740627260756173162947, 120: 0.029514485726977941540684541548,\n    121: 0.029423596115510824950081282160, 122: 0.029319431505049224621387318012, 123: 0.029269866457453052420700781894, 124: 0.029138155669407739935167666343, 125: 0.029051749467083980612284125158,\n    126: 0.028972186238373444887551348153, 127: 0.028923908506835989736886455677, 128: 0.028830034139415396427413301246, 129: 0.028722392508076534436235102009, 130: 0.028657163269701260592625072264,\n    131: 0.028635013329730917539052803629, 132: 0.028582875088661643649006521915, 133: 0.028466972445732656026128114241, 134: 0.028409750533377982620875190527, 135: 0.028388475305432615042213079041,\n    136: 0.028378658499944252543435618432, 137: 0.028119048886690898301913132417, 138: 0.027970157541658982881310387662, 139: 0.027864545488624242998161411493, 140: 0.027826454909139112134717997039,\n    141: 0.027777784092733368914057834888, 142: 0.027359612987747249582205539260, 143: 0.027267861453412023177378717933, 144: 0.027255551230952740784769882180, 145: 0.027032777654783135095155791626,\n    146: 0.026879868365202072044742920372, 147: 0.026801961733035980191327866364, 148: 0.026792919109786619419684206092, 149: 0.026584722835361357167499163700, 150: 0.026551143018069198337670636694,\n    151: 0.026435005074247670651475897049, 152: 0.026374668046756992121864546245, 153: 0.026293892254753685785774590064, 154: 0.026213060707211464030909954697, 155: 0.026133010840436738952888871001,\n    156: 0.026081444810216777879232296946, 157: 0.026015359636872298505422163420, 158: 0.025937108067267294063319650469, 159: 0.025856765971014666373825198413, 160: 0.025809271654642935304205206000,\n    161: 0.025775611733719186854326253626, 162: 0.025701021299375320103824657985, 163: 0.025630537468500726185365862025, 164: 0.025569314060349641151447008213, 165: 0.025549699961009599060269564795,\n    166: 0.025525829497529888453309701068, 167: 0.025494528727892901440517874095, 168: 0.025399828845138709873459927715, 169: 0.025356271184290413360762554001, 170: 0.025341480266968665678612614171,\n    171: 0.025324860669679017064266956405, 172: 0.025237352440757506932869385085, 173: 0.025164079621580846112071116463, 174: 0.025068478527916582570684024858, 175: 0.025023766538461118739279179164,\n    176: 0.025008790177009842554182497996, 177: 0.024723290510432062552264640435, 178: 0.024601914918489601957978186427, 179: 0.024535533102713022474309058822, 180: 0.024517598054138788946548804312,\n    181: 0.024331135972686881104962824874, 182: 0.024225297813985825260499063634, 183: 0.024172655389079123651004312191, 184: 0.024130124475982102893688379081, 185: 0.024122561772346807337265885338,\n    186: 0.023926747873660293922908646575, 187: 0.023856004370229153354021884198, 188: 0.023808708604638853465189515335, 189: 0.023793206880681504845286062243, 190: 0.023699575549957755951998273787,\n    191: 0.023608332865178536781545253469, 192: 0.023589100078245727766188384500, 193: 0.023515507948351870036649595752, 194: 0.023457642756193708966734181174, 195: 0.023411391100550054042512064852,\n    196: 0.023364993875872884562007826316, 197: 0.023325010161266404305293073176, 198: 0.023274508232478236921867774056, 199: 0.023248183054087657174982152526, 200: 0.023187252845781847308921070462,\n    201: 0.023124962704069266931904251072, 202: 0.023078309663899964446528624018, 203: 0.023068106490299170792871134512, 204: 0.023065172683339005891560914245, 205: 0.023013785401508065571556083393,\n    206: 0.022950690009249585859341953168, 207: 0.022917007423424433416882188851, 208: 0.022895923065063722326650611509, 209: 0.022887420556702964959542346474, 210: 0.022864798007961189071183778840,\n    211: 0.022796388398877154584161087544, 212: 0.022771542120917044490392218232, 213: 0.022747812906965666711610135988, 214: 0.022728547501984817598065974774, 215: 0.022727340919339519162409264840,\n    216: 0.022493119717750098515538576006, 217: 0.022396777527459154777886064557, 218: 0.022334264689312831164362250867, 219: 0.022296829135697615189082352687, 220: 0.022286733594128817310507894718,\n    221: 0.022116587680222287782985294669, 222: 0.022057041868929521481900904016, 223: 0.021993704951664341038772265845, 224: 0.021948315901106577901546697909, 225: 0.021941150663350112295919522922,\n    226: 0.021809934124701424808564459997, 227: 0.021739131430836842965363724186, 228: 0.021663345141615250721797754193, 229: 0.021655178084086490318945465912, 230: 0.021618100538821535993368419148,\n    231: 0.021547222809090441843242429817, 232: 0.021459988440422865203992657547, 233: 0.021443990310172724169810229668, 234: 0.021415992252486824250092785110, 235: 0.021412497348697612100855492846,\n    236: 0.021350697407763151022358797632, 237: 0.021304253466757928620878079698, 238: 0.021283324923563666668269186649, 239: 0.021221581951314230748799901778, 240: 0.021205542186987322742040971220,\n    241: 0.021174314133359855666325312605, 242: 0.021123563410769934334550722714, 243: 0.021069794513289509711677816090, 244: 0.021030673739067458995805793360, 245: 0.021027299667925049128129418084,\n    246: 0.021007314232259870738403056963, 247: 0.020987837083916983471474292626, 248: 0.020970178450878288609315532519, 249: 0.020901175533322781620433255438, 250: 0.020884147930934435847485048397,\n    251: 0.020870654390428440281720121010, 252: 0.020854775153922776229423905657, 253: 0.020847339016596770065625913770, 254: 0.020792120349417948140619010582, 255: 0.020776860507624182009236480168,\n    256: 0.020752969322751500974787944096, 257: 0.020739082556449734497875571106, 258: 0.020737520859335731716506069846, 259: 0.020734355301593606478495607961, 260: 0.020602663650188000995626142864,\n    261: 0.020543653667007635726866632248, 262: 0.020475188646808759519056009665, 263: 0.020446457447548915195220051165, 264: 0.020435104281827953195292354174, 265: 0.020292976393441037125585937575,\n    266: 0.020229038815730137832252358256, 267: 0.020181865290143242627409388755, 268: 0.020142995183648535278243389842, 269: 0.020126093344767781561542815599, 270: 0.020126093281458649883487554300,\n    271: 0.020005017673213609159359736588, 272: 0.019927859345237913034285320342, 273: 0.019908299706829511061352951924, 274: 0.019877497302923795998243662594, 275: 0.019873052643874403666909675625,\n    276: 0.019797164321008617200220443578, 277: 0.019741907705655785258164004802, 278: 0.019691255409287263157312443562, 279: 0.019666498986075105383158074601, 280: 0.019660371085370718727695465595,\n    281: 0.019603713406291650598050960619, 282: 0.019572699588722284973534300634, 283: 0.019534406968077567366188829571, 284: 0.019508739649749504434784895035, 285: 0.019479817366648839020467135385,\n    286: 0.019432679165109660186071620442, 287: 0.019401903398878272823105199900, 288: 0.019391695080731696443576212449, 289: 0.019349366307891768697261342488, 290: 0.019341900406284706210855492356,\n    291: 0.019318991973993167648470310847, 292: 0.019275284166547567079844281448, 293: 0.019268752742089564465157073910, 294: 0.019266875537644070720638626100, 295: 0.019226433709666146176692333639,\n    296: 0.019205610234789917395660124293, 297: 0.019185804819413448413992501737, 298: 0.019180899578615387983548637766, 299: 0.019167850760922819367289711008,\n}\n\n\ndef fail(msg: str, kind: str = \"error\") -> None:\n    print(json.dumps({\"metric\": 0.0, \"error\": msg, \"kind\": kind}))\n    sys.exit(1)\n\n\ndef check_imports(path: Path) -> None:\n    try:\n        tree = ast.parse(path.read_text(encoding=\"utf-8\"))\n    except SyntaxError as e:\n        fail(f\"syntax error in pack.py: {e}\", \"compile_error\")\n    for node in ast.walk(tree):\n        names = []\n        if isinstance(node, ast.Import):\n            names = [a.name.split(\".\")[0] for a in node.names]\n        elif isinstance(node, ast.ImportFrom) and node.module:\n            names = [node.module.split(\".\")[0]]\n        for nm in names:\n            if nm not in STDLIB_ALLOW:\n                fail(f\"import of '{nm}' is not allowed (stdlib subset only: {sorted(STDLIB_ALLOW)})\", \"compile_error\")\n\n\ndef boundary(c) -> float:\n    \"\"\"Distance from centre c to the container boundary; negative outside.\"\"\"\n    return min(c[0], 1 - c[0], c[1], 0.4 - c[1])\n\n\ndef weight(i: int) -> float:\n    \"\"\"Radius weight of object i (1-based); the eval derives the common scale s, r_i = weight(i) * s.\"\"\"\n    return 1.0\n\n\ndef value_of(centres: list, n: int) -> float:\n    if not isinstance(centres, (list, tuple)) or len(centres) != n:\n        fail(f\"pack({n}) must return {n} centres\", \"wrong_answer\")\n    pts = []\n    for c in centres:\n        try:\n            p = tuple(float(v) for v in c)\n        except Exception:\n            fail(f\"pack({n}) returned a non-point {c!r}\", \"wrong_answer\")\n        if len(p) != DIM or not all(math.isfinite(v) for v in p):\n            fail(f\"pack({n}) returned a point that is not {DIM}-D and finite: {c!r}\", \"wrong_answer\")\n        if boundary(p) < -EPS:\n            fail(f\"pack({n}) placed a centre outside the container: {p}\", \"wrong_answer\")\n        pts.append(p)\n    w = [weight(i + 1) for i in range(n)]\n    s = min(max(boundary(p), 0.0) / w[i] for i, p in enumerate(pts))   # upper bound from the walls\n    if s <= EPS:\n        fail(f\"pack({n}) has a centre on the boundary (scale={s})\", \"wrong_answer\")\n    # Any pair that limits the scale below s has distance < (w_i + w_j) s <= 2 wmax s, so it lies\n    # in the same or an adjacent cell of a grid with that spacing. Expected O(n) instead of O(n^2).\n    cell = 2.0 * max(w) * s\n    grid = {}\n    for idx, p in enumerate(pts):\n        key = tuple(int(math.floor(v / cell)) for v in p)\n        grid.setdefault(key, []).append(idx)\n    offsets = list(itertools.product((-1, 0, 1), repeat=DIM))\n    for key, members in grid.items():\n        for off in offsets:\n            nb = tuple(k + o for k, o in zip(key, off))\n            if nb < key or nb not in grid:\n                continue\n            others = grid[nb]\n            for i in members:\n                pi = pts[i]\n                for j in others:\n                    if nb == key and j <= i:\n                        continue\n                    pj = pts[j]\n                    d = math.sqrt(sum((a - b) * (a - b) for a, b in zip(pi, pj))) / (w[i] + w[j])\n                    if d < s:\n                        s = d\n    if s <= EPS:\n        fail(f\"pack({n}) has coincident centres (scale={s})\", \"wrong_answer\")\n    return w[n - 1] * s   # the largest object's radius (equal case: the common radius)\n\n\ndef main() -> None:\n    here = Path(__file__).parent\n    check_imports(here / \"pack.py\")\n    sys.path.insert(0, str(here))\n    try:\n        import pack as cand  # noqa: E402\n    except SystemExit:\n        raise\n    except Exception as e:\n        fail(f\"import pack.py failed: {e!r}\", \"compile_error\")\n    if not hasattr(cand, \"pack\"):\n        fail(\"pack.py must define pack(n, time_budget, seed)\", \"compile_error\")\n\n    ns = sorted(set(NS))\n    for n in ns:\n        if n not in RECORDS:\n            fail(f\"no Packomania record for n={n}\", \"error\")\n    seed_int = random.Random(f\"crc_400|{SEED}\").getrandbits(32)\n    per_n, beaten = {}, []\n    t_all = time.perf_counter()\n    for n in ns:\n        t0 = time.perf_counter()\n        try:\n            centres = cand.pack(n, BUDGET, seed_int)\n        except SystemExit:\n            raise\n        except Exception as e:\n            fail(f\"pack({n}) raised {e!r}\", \"runtime_error\")\n        elapsed = time.perf_counter() - t0\n        if elapsed > 1.25 * BUDGET + 3:\n            fail(f\"pack({n}) took {elapsed:.1f}s against a {BUDGET:.0f}s budget\", \"timeout\")\n        v = value_of(centres, n)\n        ratio = v / RECORDS[n]\n        per_n[n] = {\"value\": round(v, 12), \"record\": RECORDS[n], \"ratio\": round(ratio, 6), \"seconds\": round(elapsed, 2)}\n        if v > RECORDS[n] + 1e-9:\n            beaten.append(n)\n    metric = sum(x[\"ratio\"] for x in per_n.values()) / len(per_n)\n    print(json.dumps({\"metric\": round(metric, 6), \"ns\": ns, \"per_n\": per_n, \"records_beaten\": beaten,\n                      \"total_seconds\": round(time.perf_counter() - t_all, 1)}))\n\n\nif __name__ == \"__main__\":\n    main()\n","baseline":{"pack.py":"\"\"\"Baseline: a lattice of candidate points inside the container, spacing found by bisection so\nthat at least n fit. Deliberately naive; scores well below the records. Beat it.\"\"\"\n\nimport itertools\nimport math\n\nDIM = 2\n\n\ndef _boundary(c):\n    return min(c[0], 1 - c[0], c[1], 0.4 - c[1])\n\n\ndef _weight(i):\n    return 1.0\n\n\ndef _lattice(n, r):\n    \"\"\"Cubic lattice points at spacing 2r whose distance to the boundary is at least r.\"\"\"\n    lo, hi = ((0.0,) * DIM, (1.0,) * DIM)\n    step = 2.0 * r\n    axes = []\n    for d in range(DIM):\n        k = int((hi[d] - lo[d]) / step) + 1\n        axes.append([lo[d] + r + i * step for i in range(k)])\n    pts = [p for p in itertools.product(*axes) if _boundary(p) >= r]\n    return pts\n\n\ndef pack(n, time_budget, seed):\n    # treat every object as the largest one when choosing the lattice spacing\n    wmax = max(_weight(i + 1) for i in range(n))\n    # find a feasible spacing by halving, then bisect between it and the last infeasible one\n    a = 1.0\n    while len(_lattice(n, a * wmax)) < n and a > 1e-9:\n        a /= 2\n    b = 2 * a\n    for _ in range(40):\n        m = (a + b) / 2\n        if len(_lattice(n, m * wmax)) >= n:\n            a = m\n        else:\n            b = m\n    pts = _lattice(n, a * wmax)\n    pts.sort(key=lambda p: -_boundary(p))   # keep the most interior points\n    return [tuple(p) for p in pts[:n]]\n"}}