Сайфер: как найти все цепочки одиночных узлов, не повторяющихся?

Я хочу найти ВСЕ пути, начинающиеся и заканчивающиеся от / к конкретному узлу. Мне бы хотелось, чтобы каждый узел в пути появлялся только один раз.

Например, на графике вот так:

(a)-[:REL]->(b)-[:REL]->(c)-[:REL]->(a)
(a)-[:REL]->(e)-[:REL]->(f)-[:REL]->(a)
(e)-[:REL]->(b)

grafically:

  e → b
 ↙ ↖ ↗ ↘
f → a ← c

Шифр код:

CREATE (a { name:'A' })-[:REL]->(b {name:'B'})-[:REL]->(c { name:'C' })
       -[:REL]->(a)-[:REL]->(e {name:'E'})-[:REL]->(f {name:'F'})-[:REL]->(a),
       (e)-[:REL]->(b)

Я хотел бы, чтобы исследование цепочек, начиная с (а), возвращало

(a)->(b)->(c)->(a)

(a)->(e)->(f)->(a)

(a)->(e)->(b)->(c)->(a)

в то время как начиная с (f) возвращает только

(f)->(a)->(e)->(f)

и не

(f)->(a)->(b)->(c)->(a)->(e)->(f)

потому что он проходит дважды через узел (а).

Я попробовал:

MATCH p=(a {name:'F'})-[:REL*1..]->(a) 
WHERE SINGLE(e1 IN TAIL(NODES(p)) WHERE SINGLE(e2 IN TAIL(NODES(p)) WHERE e1=e2))
RETURN p

но у меня нет результата. Лучшее, чего я смог достичь - это не повторять только начальный узел с этим запросом:

MATCH p=(a {name:'F'})-[:REL*1..]->(a) 
WHERE SINGLE(e IN TAIL(NODES(p)) WHERE e=a)
RETURN p

но, очевидно, это не то, что я хочу, потому что он также возвращает

(f)->(a)->(b)->(c)->(a)->(e)->(f)

это путь, включающий узел (а) дважды.

Может кто-нибудь предложить мне решение?

Заранее спасибо.

Постскриптум Используемая мной версия Neo4j - 2.0

Ответы на вопрос(2)

Ваш ответ на вопрос