Two research passes noted blocks for the topic "{topic}" as "Title — description". For EACH pair, decide: do A and B denote the SAME block → **ja**, or TWO DIFFERENT blocks → **nein**?

PAIRS:
{pairs}

## How to decide (per pair)
**STEP 1 — Name the CANONICAL ENTITY of each side.** Strip catalogue numbers („Definition 6.19", „Satz 7.8"), drop generic tags like „(Problem)"/„-Problem", ignore case, spacing and hyphenation. So „HITTING SET" and „HittingSet (Problem)" share one canonical entity; „Definition 6.19 NP" and „NP" both name the entity **NP**; „Algorithmus ΔTSP1" and „ΔTSP1" both name **ΔTSP1**.

**STEP 2 — Same entity, or different?**
- **DIFFERENT canonical entity → nein**, however identical the wording:
  - two different problems/objects: „Clique" ≠ „Vertex Cover"; „Lower Bound Clique bzgl. Knoten" ≠ „… bzgl. Kanten" (a different parameter is a different result);
  - a distinct **variant** is its own entity: „GA" ≠ „ModifiedGreedy (MGA)"; „SAT" ≠ „3-SAT"; „Knapsack" ≠ „Multiple-Choice-Knapsack";
  - a **reduction between two problems** is its own entity: „Clique" ≠ „3-SAT ≤ Clique";
  - two reductions/relations that share ONE side but differ on the OTHER (or run in the opposite direction) are DIFFERENT results → **nein**: „SAT ≤ Clique" ≠ „SAT ≤ 3-Dim-Matching", „VertexCover ≤ FVS" ≠ „VertexCover ≤ Δ-Cover". A restriction/special case („3-SAT ≤ X") is NARROWER than the general („SAT ≤ X"), never the same.
- **SAME canonical entity → ja**, even when A and B emphasize DIFFERENT FACETS of it. Facets of one and the same object include: its **formal definition**, a **mechanism/step** (how it works), a **property** (approximation ratio, a bound, complexity, ∈ NP), a **characterization**, a **naming variant**. Two entries describing different facets of the SAME entity are duplicates.

**STEP 3 — „When in doubt → nein" applies ONLY when STEP 1 is ambiguous** (you genuinely cannot tell whether the two names denote the same object). It does NOT fire merely because the two descriptions differ — differing descriptions of the SAME entity are **ja**.

## Examples
DUPLICATE (ja) — same entity, different facet/wording:
- A: „Algorithmus ΔTSP1 — MST, Kanten verdoppeln, Eulerkreis, Abkürzungen"  B: „ΔTSP1 — TSP-Approximationsalgorithmus mit Rate 2" → both = algorithm **ΔTSP1** (steps vs. its ratio) → **ja**
- A: „Definition 6.19 NP — L ∈ NP ⇔ ∃ NDTM …"  B: „NP — Klasse aller polynomiell verifizierbaren Sprachen" → both = **NP** (definition vs. characterization) → **ja**
- A: „HITTING SET"  B: „HittingSet (Problem)" → same entity, only naming → **ja**
- A: „SET COVER"  B: „Mengenüberdeckungsproblem" → **ja**

NOT A DUPLICATE (nein) — different entity:
- A: „Greedy-Algorithmus GA"  B: „ModifiedGreedy (MGA)" → two different algorithms → **nein**
- A: „Lower Bound Clique bzgl. Knoten"  B: „Lower Bound Clique bzgl. Kanten" → different parameter → **nein**
- A: „Clique"  B: „3-SAT ≤ Clique" → a problem vs. a reduction (its own block) → **nein**
- A: „VertexCover ≤ FVS"  B: „VertexCover ≤ Δ-Cover" → same source, different target → different reductions → **nein**
- A: „Cliquenproblem"  B: „Vertex-Cover-Problem" → different problems → **nein**

Write ONLY the JSON file to: {out_path}

Format (each pair number from the list with „ja" or „nein"; no other text in the file):
{{"pairs": {{"1": "ja", "2": "nein"}}}}
