#include <iostream>
 #include <iomanip>
 #include <string>
 #include <vector>
 using namespace std;
 
 #include "ccc_time.h"
 
 class Clock {
 public:
    Clock(bool use_military);
    virtual string get_location() const;
    virtual int get_hours() const;
    int get_minutes() const;
    bool is_military() const;
 private:
    bool military;
 };
 
 Clock::Clock(bool use_military)
 {  military = use_military; }
 
 string Clock::get_location() const
 {  return "Local";  }
 
 int Clock::get_hours() const
 {  Time now;
    int hours = now.get_hours();
    if (military) return hours;
    if (hours == 0) return 12;
    else if (hours > 12) return hours - 12;
    else return hours;
 }
 
 int Clock::get_minutes() const
 {  Time now;
    return now.get_minutes();
 }
 
 bool Clock::is_military() const
 {  return military;  }
 
 class TravelClock : public Clock  {
 public:
    TravelClock(bool mil, string loc, int diff);
    string get_location() const;
    int get_hours() const;
 private:
    string location;
    int time_difference;
 };
 
 TravelClock::TravelClock(bool mil, string loc, int diff)
    : Clock(mil)
 {  location = loc;
    time_difference = diff;
    while (time_difference < 0) 
       time_difference = time_difference + 24;
 }
 
 string TravelClock::get_location() const
 {  return location;  }
 
 int TravelClock::get_hours() const
 {  int h = Clock::get_hours();
    if (is_military())
       return (h + time_difference) % 24;
    else
    {  h = (h + time_difference) % 12;
       if (h == 0) return 12;
       else return h;
    }
 }
 
 int main()
 {  vector<Clock*> clocks(3);
    clocks[0] = new Clock(true);
    clocks[1] = new TravelClock(true, "Rome", -1);
    clocks[2] = new TravelClock(false, "Tokyo", 5);
 
    for (int i = 0; i < clocks.size(); i++)
    { cout << clocks[i]->get_location() << " time: " 
           << clocks[i]->get_hours() << ":"
           << setw(2) << setfill('0') 
           << clocks[i]->get_minutes() 
           << setfill(' ') << "\n";
    }
    return 0;
 }