+ ragged_last_ = breaker->is_last () && breaker->ragged_last ();
+}
+
+Page_spacing_result
+Page_spacer::solve ()
+{
+ if (simple_state_.empty ())
+ {
+ simple_state_.resize (lines_.size ());
+ for (vsize i = 0; i < lines_.size (); ++i)
+ calc_subproblem (VPOS, i);
+ }
+
+ Page_spacing_result ret;
+ ret.penalty_ = simple_state_.back ().penalty_
+ + lines_.back ().page_penalty_ + lines_.back ().turn_penalty_;
+ ret.system_count_status_ = simple_state_.back ().system_count_status_;
+
+ vsize system = lines_.size () - 1;
+ while (system != VPOS)
+ {
+ Page_spacing_node const& cur = simple_state_[system];
+ vsize system_count = (cur.prev_ == VPOS) ? system + 1 : system - cur.prev_;
+
+ ret.force_.push_back (cur.force_);
+ ret.systems_per_page_.push_back (system_count);
+ ret.demerits_ += cur.force_ * cur.force_;
+ system = cur.prev_;
+ }
+
+ reverse (ret.force_);
+ reverse (ret.systems_per_page_);
+ return ret;