For the topic "{topic}", below are block candidates, each as "Title — Description". **Judge by the CONTENT (after the —), not the title.** Decide for EACH entry: a real, standalone block → `keep`, otherwise discard (into no list).

CANDIDATES (decide on each):
{rest}

What a block IS: a standalone LEARNING UNIT — a concept, a method, a problem, a definition, a named theorem WITH substantive content.

**Define test (decisive):** Does the CONTENT describe a standalone concept you can explain to a learner — WITHOUT reference to a specific proof step or a particular spot in the script? Yes → include. No → discard.

What is NOT a block (→ discard, EVEN if a description is attached):
- Auxiliary constructs that exist only WITHIN a proof/reduction: "Knoten z", "Hilfsvariable", "Bedingung (**)" (a helper node / a marked condition — not a standalone concept).
- Proof fragments/intermediate steps: "Beweis (b) Güte", "Beweis ⊂ Richtung", "Eigenschaft (a)".
- Generic placeholders without their own concept: "Optimale Lösung", "Lösung" (only meaningful in the context of a concrete problem).
- Pure references WITHOUT substantive description: "Satz 7.18" (nothing meaningful after the —).
- Too vague or evidently fabricated.

**Reference title WITH real content → include AND rename:** If an entry has an uninformative title ("Satz 7.18", "Korollar 6.18", "Lemma 6.2") but the description describes a real concept → include it and give a speaking name (in GERMAN) drawn from the content in the `rename` field. In the `keep` entry the **original title** stays (for matching); the new name goes ONLY in `rename`. A source numbering is never a canonical title — even with a name attached ("Satz 7.13 (Christofides)", "Satz 7.6: Kriterium …"), rename to the concept/result ("Satz von Christofides", "Kriterium für Eulerschen Kreis"); the numbering may remain in the description. A named theorem that states its own result stays a block — named after the RESULT, not the number.

Examples:
- "Clique-Member — k-Clique, die einen festen Knoten v enthält" → **keep** (standalone problem).
- "Satz 7.18 — MGA hat Worst-Case-Güte 2" → **keep** + `rename`: "Satz 7.18" → "MGA-Algorithmus (Güte 2)".
- "Bedingung (**) — Ungleichungen pi ≤ pk im Scheduling-Beweis" → **verwerfen** (auxiliary construct in the proof).
- "Satz 7.18" (no description) → **verwerfen** (mere reference).

Rules:
- Decide by the standalone Define test above: an entry that only makes sense INSIDE a specific proof, reduction, or spot in the script is NOT a block → discard it. Include only entries that stand on their own (a concept you could teach on its own); duplicates are removed separately later. This is single-mention material, so hold a firm bar — but never discard a genuine standalone concept hiding behind a reference title (see the rename rule above).
- Copy included entries VERBATIM ("Title — Kurzbeschreibung"), do not rephrase.{final}

Write ONLY the JSON file to: {out_path}

Format (no other text in the file; `rename` may be empty):
{{"keep": ["Title — Kurzbeschreibung"], "rename": {{"alter Title": "sprechender Name"}}, "rest": []}}
