Below are numbered block candidates for the topic "{topic}". They come from a similarity cluster. Some refer to the SAME block or a property of it, others are distinct. Group them. CANDIDATES: {entries} Rules: - Form groups: numbers that belong to the SAME block go into ONE group. - **Watch the core entity** (the problem/object): Clique, Vertex Cover, Set Cover, Knapsack, Dominating Set, LPT/List Scheduling … Different entity → different groups, even with similar phrasing ("Lower Bound Clique" ≠ "Lower Bound Vertex Cover"). - True paraphrases go TOGETHER, even when worded differently ("List Scheduling" = "LPT-Algorithmus"; "Set Cover" = "Mengenüberdeckung"). - **A problem's properties belong TO the problem block — not on their own.** Bundle with the problem: its complexity status (∈ NP, NP-schwer, NP-vollständig), its verifier / certificate / NDTM, "… als Sprache / Definition", its individual lower-bound parameters (k / r / |U|). - Example: "Knapsack", "Knapsack ∈ NP", "Knapsack NP-schwer", "Knapsack NP-vollständig", "Verifizierer für Knapsack" → ONE group (the "Knapsack" block). - Example: "Hitting Set Lower Bound (k)", "(r)", "(|U|)" → ONE group. - Keep SEPARATE (own blocks): different problems (Clique-Member ≠ Clique-Nomember); a REDUCTION between two problems is its own technique (e.g. "3-SAT ⪯ k-Clique" stays separate); different methods/theorems with their own statement. - When in doubt between two different problems → SEPARATE. For a problem + its property → BUNDLE. - EVERY number goes into EXACTLY ONE group. A standalone block is a group with one element. Write ONLY the JSON file to: {out_path} Format (lists of candidate numbers; each number exactly once): {{"groups": [[1, 3], [2], [4, 5]]}}