i have generated reports that are hundreds of pages long. the first thing you need is to base your report of a query, which is made from good, normalised tables. the second things you MAY need, is to use SUBreports.
that is, make a query based on your cities. then make a report based off that query.
then, to make a subreport, make a query based on the details you want your cities to have (it is easy to determine if you need/want a subreport - if your data is split into a 1-many table structure, then the "main" report is based on the data from "1" and the subreport is the "many").
so, if i have a table called tblPeople, then i have another table called tblTraining, i can make a report based off a query that pulls all the People data i want, and then i can make another report based off the tblTraining data, then i link the two on my primary/foreign key IDs and make the training report a SUBreport of the People report. (edit: as in, i physically use the "subreport" control from the toolbar to plonk the training report onto the people report - and follow the prompts re: linking. the training report is a regular report until it is on another report, where it then becomes known as a 'sub' report - like your training table is just a regular table - then you relate it to the people table with a foreign key, it becomes a "many" table to your people table (which is the '1' table). get it?)
(edit: so "1" person can have "many" training sessions - a 1-many relationship, often annotated on these fora as "1-m")
so person 1 may have completed 10 training exercises, but person 2 might only have completed 2, etc. all this data will display in a report for as many pages as the data goes. (edit: but person 2 will not have extra space under their name if you select the subreport control properties "can grow/shrink" to 'yes')
why, how are you doing it?