#include <iostream>
using namespace std;

struct Time {
    int hour, minute; // in the ranges 0..23 and 0..59, respectively
    double second;    // 0.0 <= second < 60.0
};

void printTime (const Time& t) {
    cout << t.hour << ":" << t.minute << ":" << t.second << endl;
}

// after(time1, time2) returns true if time1 is after time2

bool after (const Time& time1, const Time& time2) {
    if (time1.hour > time2.hour) return true;
    if (time1.hour < time2.hour) return false;
    // hours are the same
    if (time1.minute > time2.minute) return true;
    if (time1.minute < time2.minute) return false;
    // minutes are the same
    return (time1.second > time2.second);
}

Time addTime (const Time& t1, const Time& t2) {
    Time sum;
    sum.hour = t1.hour + t2.hour;
    sum.minute = t1.minute + t2.minute;
    sum.second = t1.second + t2.second;
    // regularize the fields
    while (sum.second >= 60.0) {
        sum.second -= 60.0;
        sum.minute++;
    }
    while (sum.minute >= 60) {
        sum.minute -= 60;
        sum.hour++;
    }
    return sum;
}

double convertToSeconds (const Time& t) {
    const int minutes = t.hour * 60 + t.minute;
    const double seconds = minutes * 60 + t.second;
    return seconds;
}

Time makeTime (double secs) {
    Time time;
    time.hour = int (secs / 3600.);
    secs -= time.hour * 3600.0;
    time.minute = int (secs / 60.0);
    secs -= time.minute * 60.0;
    time.second = secs;
    return time;
}

void addToTime (const Time& t, Time& tDest) {
  const double seconds = convertToSeconds(t) + convertToSeconds(tDest);
  tDest = makeTime (seconds);
}

int main () {
    // insert code here...
    Time time = { 11, 59, 3.14159 };
    Time earlierTime = { 5, 0, 15};
    printTime (time);
    cout << after(time, earlierTime) <<
        ", " << after(earlierTime, time) << endl;
    printTime( addTime (time, earlierTime) );
    Time start = {14, 10, 0};
    Time length = {0, 75, 0};
    printTime (start);
    addToTime (length, start);
    printTime (start);
    return 0;
}

