+ break_into_pieces (end-1, end, best_division);
+
+ return best.systems_per_page_;
+}
+
+SCM
+Optimal_page_breaking::solve ()
+{
+ vector<vsize> systems_per_page;
+
+ SCM forced_page_counts = book_->paper_->c_variable ("page-count");
+ if (scm_is_integer (forced_page_counts))
+ forced_page_counts = scm_list_1 (forced_page_counts);
+
+ bool is_forced_page_counts = false;
+ if (scm_to_bool (scm_list_p (forced_page_counts)))
+ {
+ int len = scm_to_int (scm_length (forced_page_counts));
+ if (len != (int)last_break_position ())
+ {
+ warning (_f ("page-count has length %d, but it should have length %d "
+ "(one more than the number of forced page breaks)",
+ len, (int)last_break_position ()));
+ }
+ else
+ is_forced_page_counts = true;
+ }
+
+
+ message (_f ("Solving %d page-breaking chunks...", last_break_position ()));
+ for (vsize end = 1; end <= last_break_position (); ++end)
+ {
+ SCM page_count = SCM_EOL;
+ if (is_forced_page_counts)
+ {
+ page_count = scm_car (forced_page_counts);
+ forced_page_counts = scm_cdr (forced_page_counts);
+ }
+
+ vector<vsize> chunk_systems = solve_chunk (end, page_count);
+ systems_per_page.insert (systems_per_page.end (), chunk_systems.begin (), chunk_systems.end ());
+ }