def descendants_query(node_id, node_label, edge_label="edge"):
    """Generate Cypher query finding descendant nodes starting at 'node_id'."""
    return (
        "MATCH path=(n:{} {{id: '{}'}})-[:{}*1..]->(m:{})\n".format(
            node_label, node_id, edge_label, node_label) +
        "RETURN m.id AS descendant, REDUCE(p=[], n in nodes(path) | p + [n.id]) as path\n"
    )