ostream& operator<<(ostream& os, const Problem& p) {
std::ostream& operator<<(std::ostream& os, const Problem& p) {
ostream& operator<<(ostream& os, const Problem& p) {  os << "name: " << p.name();  os << endl << "domain: " << p.domain().name();  os << endl << "objects:";  for (NameMapIter ni = p.objects_.begin(); ni != p.objects_.end(); ni++) {    os << ' ' << *(*ni).second << " - " << (*ni).second->type();  }  os << endl << "initial condition: " << p.init();  os << endl << "goal: " << p.goal();  return os;}