Is it something like this what you are looking for:
match (n:Label)--(m:Label{name:'B'})--(o:Label{name:'C'})--(p:Label{name:'D'})
where n.name in ['A', 'E', 'F']
return n,m,o,p
I can recommend the Graph Data Modeling for neo4j course. More specifically the part on Common Graph Structures has a section on "Timeline Trees" that could be of help.
Can you explain your Period node? Why are you introducing it? Is it for example for aggregating data in time periods, or for supporting specific queries?
Perhaps give some examples of Events and Periods you want to relate.
I propose you develop your graph data model iteratively and refactor it along the way.
Getting a rough first model quickly reduces the total time you need to reach the more refined version. Refactoring a graph is relatively inexpensive.
Based on your...