Polycarp is going to participate in the contest. It starts at $$$h_1:m_1$$$ and ends at $$$h_2:m_2$$$. It is guaranteed that the contest lasts an even number of minutes (i.e. $$$m_1 \% 2 = m_2 \% 2$$$, where $$$x \% y$$$ is $$$x$$$ modulo $$$y$$$). It is also guaranteed that the entire contest is held during a single day. And finally it is guaranteed that the contest lasts at least two minutes.Polycarp wants to know the time of the midpoint of the contest. For example, if the contest lasts from $$$10:00$$$ to $$$11:00$$$ then the answer is $$$10:30$$$, if the contest lasts from $$$11:10$$$ to $$$11:12$$$ then the answer is $$$11:11$$$.

The first line of the input contains two integers $$$h_1$$$ and $$$m_1$$$ in the format hh:mm. The second line of the input contains two integers $$$h_2$$$ and $$$m_2$$$ in the same format (hh:mm). It is guaranteed that $$$0 \le h_1, h_2 \le 23$$$ and $$$0 \le m_1, m_2 \le 59$$$. It is guaranteed that the contest lasts an even number of minutes (i.e. $$$m_1 \% 2 = m_2 \% 2$$$, where $$$x \% y$$$ is $$$x$$$ modulo $$$y$$$). It is also guaranteed that the entire contest is held during a single day. And finally it is guaranteed that the contest lasts at least two minutes.

Print two integers $$$h_3$$$ and $$$m_3$$$ ($$$0 \le h_3 \le 23, 0 \le m_3 \le 59$$$) corresponding to the midpoint of the contest in the format hh:mm. Print each number as exactly two digits (prepend a number with leading zero if needed), separate them with ':'.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <stack>
#include <string>
#include <ctime>
#include <iomanip>
#include <set>
#include <iterator>
#include <map>
#include <assert.h>
#include <sstream>
#include <deque>
#include <numeric>
using namespace std;

using ll = long long;

#define pb push_back
#define all(v) (v).begin(), (v).end()

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define for1(i, n) for(int i = 1; i <= (int)(n); i++)
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

typedef vector<int> vi;
typedef vector<ll> vll;

const int INF = 1e9 + 5;
const int MOD = 1e9 + 7;

inline ll fpow(ll n, ll k, ll m = MOD) { ll r = 1; for (; k; k >>= 1) { if (k & 1) r = r * n % m; n = n * n % m; } return r; }
inline void submod(ll& a, ll b, ll m = MOD) { if ((a = (a - b)) < 0) a += m; }
inline ll gcd(ll a, ll b) { ll r; while (b) { r = a % b; a = b; b = r; } return a; }
inline ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

int main()
{
	int h1, m1;
	scanf("%d:%d", &h1, &m1);
	int h2, m2;
	scanf("%d:%d", &h2, &m2);
	int t1 = h1 * 60 + m1;
	int t2 = h2 * 60 + m2;
	int t3 = (t1 + t2) / 2;
	printf("%02d:%02d\n", t3 / 60, t3 % 60);
	return 0;
}

#include<iostream>
#include<math.h>
#include<cstring>
#include <sstream>
using namespace std;

int main(){

string h1,m1,h2,m2,a,b;
cin>>a;
cin>>b;

for(int i=0;i<2;i++){
    h1+=a[i];
    h2+=b[i];
}
for(int i=3;i<5;i++){
    m1+=a[i];
    m2+=b[i];
}

stringstream geek1(h1);
stringstream geek2(m1);
stringstream geek3(h2);
stringstream geek4(m2);
int x1,y1,x2,y2,x=0,y=0;

geek1 >> x1;
geek2 >> y1;
geek3 >> x2;
geek4 >> y2;

if(x1<x2){
    swap(x1,x2);
    swap(y1,y2);
}else if(x1==x2&&y1<y2){
    swap(y1,y2);
}

if(y1<y2){
   y=((y1+60)-y2)/2;
   x2=x2+1;
}
else{
y=(y1-y2)/2;
}

if((y2+y)>59){
    y=(y2+y)%60;

}

else{
    y=y2+y;
}

if((x1-x2)%2){
   x= x+(x1-x2)/2;
   y=y+30;

}else{
  x= x+(x1-x2)/2;
}
x=x2+x;

if(y>59){
    x=x+1;
    y=y%60;
}

printf("%02d:%02d\n",x,y);

}

# include <cstdio>
# include <cstring>
# include <algorithm>
# include <cmath>
# include <climits>
# define Rep(i,a,b) for (int i=a;i<=b;i++)
# define _Rep(i,a,b) for (int i=a;i>=b;i--)
# define MCT(a,b) memset(a,b,sizeof(a))
using namespace std;

int h1,m1,h2,m2,min1,min2,ans;
void read(){
	scanf("%d:%d",&h1,&m1);
	min1=h1*60+m1;
	scanf("%d:%d",&h2,&m2);
	min2=h2*60+m2;
}
void print(int t){
	if (t<10) printf("0");
	printf("%d",t);
}
void work(){
	ans=min1+(min2-min1)/2;
	print(ans/60);
	printf(":");
	print(ans%60);
	puts("");
}
int main()
{
	read();
	work();
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
/*int main(){
    int n;
    cin>>n;
    while(n!=0){
        string s;
        cin>>s;
        if(set<char>(s.begin(),s.end()).size() == s.length() && *max_element(s.begin(),s.end()) == *min_element(s.begin(),s.end())+s.length()-1){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
        n--;
    }
    return 0;
}*/
/*int main(){
    int n ,m ,ans=0;
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>m;
    if(m%n != 0 ){
        cout<<"-1"<<endl;
        return 0;
    }
    int d = m/n;
    while(d%2 == 0  && d > 1 ){
        d = d/2;
        ans++;
    }
    while(d%3 == 0 && d > 1){
        d = d/3;
        ans++;
    }
    if(d==1)    cout<<ans<<endl;
    else cout<<"-1"<<endl;
    return 0;
}
*/
int main(){
    int h1 ,m1;
    scanf("%d:%d",&h1,&m1);
    int h2 , m2;
    scanf("%d:%d",&h2,&m2);
    int t1 = h1*60 + m1;
    int t2 = h2*60 + m2;
    int t3 = (t1+t2)/2;
    printf("%02d:%02d",t3/60 ,t3%60);
    return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define int long long
#define pb push_back
#define pi 3.14159265
#define M 1000000007
#define MM 998244353
#define arrinput for(int i=0; i<n; i++) cin>>arr[i];
#define arrsum for(int i=0; i<n; i++) sum+=arr[i];
#define for0(i,n) for(int i=0; i<n; i++)
#define for1(i,n) for(int i=1; i<=n; i++)
#define forr(i,n) for(int i=n-1; i>=0; i--)
#define all(v) (v).begin(),(v).end()
#define vsort sort(v.begin(), v.end());
#define vsortdesc sort(v.begin(), v.end(), greater<int>());

/*
int isprime(int n){
    if(n<2 || (!(n&1) && n!=2))
        return 0;
    for(int i=3; i*i<=n; i+=2){
        if(!(n%i))
            return 0;
    }
    return 1;
}

int iscomp(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
        return 1;}
    }
    return 0;
}

int pw(int a,int b,int p){
    if(b==0)return 1;
    int t=pw(a,b/2,p);
    if(b%2)return (((a*t)%p)*t)%p;
    else return ((t*t)%p);
}

int fact(int a){
    if((a==1)||(a==0))
    return 1;
    else
    return a*fact(a-1);
}*/

int mini(int a[], int n){
   sort(a,a+n);
   return a[0];
}

signed main() {
    IOS

    int h1,m1,h2,m2;
    char c;
    cin>>h1>>c>>m1>>h2>>c>>m2;
    h1=h1*60+m1;
    h2=h2*60+m2;
    h1=(h1+h2)/2;
    m1=h1/60;
    m2=h1%60;
    if(m1<10)
    cout<<0<<m1<<":";
    else
    cout<<m1<<":";
    if(m2<10)
    cout<<0<<m2;
    else
    cout<<m2;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);
    string sh1=s1.substr(0,2);
    string sm1=s1.substr(3,5);
    string sh2=s2.substr(0,2);
    string sm2=s2.substr(3,5);
    int h1=stoi(sh1);
   // cout<<sh1<<endl;
    int m1=stoi(sm1);
    int h2=stoi(sh2);
    int m2=stoi(sm2);
    int a1=(h1*60+m1);
    int a2=(h2*60+m2);
    int a3=(a1+a2)/2;
    printf("%02d:%02d\n",a3/60,a3%60);
    return 0;

}

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back

using namespace std;
const long long MOD = (long long)1e9 + 7;

string s[2], ans;

int calc_t(int ix)
{
	int m = 0;
	m += (s[ix][0] - '0') * 10 * 60;
	m += (s[ix][1] - '0') * 60;
	m += (s[ix][3] - '0') * 10;
	m += (s[ix][4] - '0');
	return m;
}

void P(int t)
{
	ans = "00:00";
	ans[0] += t / 600;
	ans[1] += (t - (t / 600) * 600) / 60;
	ans[3] += (t - (t / 60) * 60) / 10;
	ans[4] += t % 10;
	cout << ans << "\n";
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> s[0] >> s[1];
	P((calc_t(1) - calc_t(0)) / 2 + calc_t(0));
	//system("pause");
	return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
	int h1, m1, h2, m2;
	scanf("%d:%d", &h1, &m1);
	scanf("%d:%d", &h2, &m2);
	int dc = h1 * 60 + m1;
	int dm = h2 * 60 + m2;
	int d = dm - dc;
	d = d / 2;
	int d1 = h1 * 60 + m1 + d;
	h1 = d1 / 60;
	m1 = d1 % 60;
	if (h1 < 10)
		cout << "0";
		cout << h1;
		cout<< ":";
		if (m1 < 10)
		cout << "0";
		cout<< m1;
}

#include <bits/stdc++.h>

using namespace std;
int h1,m1,h2,m2,dur;
char c;

int main()
{
    cin >> h1 >> c >> m1 >> h2 >> c >> m2;
    dur = (h2*60+m2)-(h1*60+m1);
    dur /= 2;
    int hx = (h1+((m1+dur)/60))%24;
    int mx = (m1+(dur%60))%60;
    if (hx<10)
    {
        cout << 0 << hx;
    } else {cout << hx;}
    cout << ":";
    if (mx<10)
    {
        cout << 0 << mx;
    } else {cout << mx;}
    return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    char a;
    int hour1, minute1;
    int hour2, minute2;
    int hour, minute;

    cin >> hour1 >> a >> minute1;
    cin >> hour2 >> a >> minute2;

    int minutes;

    minutes = (hour2 - hour1) * 60 + minute2 - minute1;
    minutes = minutes / 2;

    if(minutes < 60 - minute1){
        hour = hour1;
        minute = minute1 + minutes;
        if(hour < 10 && minute < 10)
            cout << "0" << hour << ":0" << minute;
        else if(minute == 60){
            if(hour < 9)
                cout << "0"<< hour + 1 << ":00";
            else
                cout << hour + 1 << ":00";
        }

        else if(hour < 10 && minute >= 10)
            cout << "0" << hour << ":" << minute;
        else if(hour >= 10 && minute < 10)
            cout << hour << ":0" << minute;

        else
            cout << hour << ":" << minute;
    }
    else{
        while(minutes >= 60 - minute1){
            minutes = minutes - (60 - minute1);
            minute1 = 0;
            hour1++;
        }
        hour = hour1;
        minute = minute1 + minutes;
        if(hour < 10 && minute < 10)
            cout << "0" << hour << ":0" << minute;
        else if(minute == 60){
            if(hour < 9)
                cout << "0"<< hour + 1 << ":00";
            else
                cout << hour + 1 << ":00";
        }
        else if(hour < 10 && minute >= 10)
            cout << "0" << hour << ":" << minute;
        else if(hour >= 10 && minute < 10)
            cout << hour << ":0" << minute;
        else
            cout << hour << ":" << minute;

    }

}

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//#include <boost/multiprecision/cpp_int.hpp>
//
//using namespace boost::multiprecision;
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

/*** Typedef ***/
typedef long long ll;
//typedef long long lli;
typedef long long int lli;
typedef unsigned long long ull;
typedef    long double   ld;

//typedef    unordered_set<ll>   usll;
//typedef    unordered_multiset<ll>   umsll;

/*** Loops ***/
#define ffit(i, dat)    for (__typeof(dat.begin()) i = dat.begin(); i != dat.end(); ++i)
#define ff1(i,a,b) for(ll i = a; i < b; i++)
#define ff2(i,a,b) for(ll i = b-1; i >= a; i--)
#define ff3(i,a,b,m) for(ll i = a; i <b; i+=m)
#define ipar(ar,n) ll ar[n]; ff1(i,0,n) cin>>ar[i];
#define opar(ar,n) ff1(i,0,n) cout<<ar[i]<<" ";
#define foRev(num) for(ll i = num - 1; i >= 0; i--)
#define forIn(arr, num) for(ll i = 0; i < num; i++) sc1(arr[i]);
#define forIn1(arr, num) for(ll i = 1; i <= num; i++) sc1(arr[i]);
#define vpnt(ans) for(ll i = 0; i < ans.size(); i++) cout << ans[i] << (i + 1 < ans.size() ? ' ' : '\n');
#define apnt(arr, num) for(ll i = 0; i < num; i++) cout << arr[i] << (i + 1 < num ? ' ' : '\n');

/*** Define Values ***/

#define PI acos(-1.0)
#define eps 1e-7
#define size1 15

/*** STLs ***/
#define cu continue
#define br break
#define rsz resize
#define ins insert
#define ft front
#define bk back
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define ff first
#define ss second
#define mp make_pair
#define mem(name, value) memset(name, value, sizeof(name))
#define MN3(n1,n2,n3) min(n1,min(n2,n3))
#define MN4(n1,n2,n3,n4) min(n1,min(n2,min(n3,n4)))
#define MX3(n1,n2,n3) max(n1,max(n2,n3))
#define MX4(n1,n2,n3,n4) max(n1,max(n2,max(n3,n4)))
#define mxar(a,n) *max_element(a,a+n)
#define mnar(a,n) *min_element(a,a+n)
#define arr_sm(a,n) accumulate(a,a+n,0)
#define vc_sm(ve,i,j) accumulate(ve.begin()+i,ve.begin()+j+1,0)
#define mx_vc(ve) *max_element(ve.begin(),ve.end())
#define mn_vc(ve) *min_element(ve.begin(),ve.end())
//#define endl " \n"

/*** STLs ***/
typedef vector <ll> vll;
#define vvll vector<vll>
typedef set <ll> sll;
typedef multiset <ll> msll;
//typedef multimap <ll> mpll;
typedef queue <ll> qll;
typedef map <ll, ll> mll;
typedef pair <ll, ll> pll;
typedef vector <pair <ll, ll> > vpll;
typedef priority_queue <pair <ll, ll> > pqpll;
#define ml unordered_map<ll,ll>
///typedef    unordered_multiset<int>   umsi;
typedef    unordered_set<ll>   us;
#define    oncnt    __builtin_popcount
#define    zerobegin   __builtin_clz
#define    zeroend   __builtin_ctz
#define    parity   __builtin_parity

///vector<vector<int>> v(10, vector<int>(20,500)); 2d vector initialization. of 10 rows and 20 columns, with value 500.

/*** Sorts ***/
#define all(v) (v).begin(), (v).end()
#define rev(v) reverse(all(v))
#define srt(v) sort(all(v))
#define srtgrt(v) sort(all(v), greater<ll>())
#define prsrt greater<pair<int,int>>()
/*** Some Prints ***/
#define ip(n) ll n; cin>>n;
#define ip2(n,k) ll n; cin>>n; ll k; cin>>k;
#define kl    '\n'
#define no cout << "NO" << '\n'
#define yes cout << "YES" << '\n'
#define case cout << "Case " << t++ << ": ";
#define ps(x,y)         fixed<<setprecision(y)<<x
#define inf             1e18
#define dbg(x) cout << '>' << #x << ':' << x << endl;
#define w(x)             ll x; cin>>x; while(x--)
bool isPtSquare(long double x)
{
    long double sr = sqrt(x);
    return ((sr - floor(sr)) == 0);
}

ll facts(ll n,ll mod)
{
	ll prod=1;
	for(ll i=1;i<=n;i++)
	{
		prod=(prod*i)%mod;
	}
	return prod;
}

bool isvwl(char ch) {
    if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
         return true;
    else return false;
}
ll mod = 1e9+7;
lli powers(lli b, lli p, lli m = mod){
    lli res = 1;
    while(p > 0){
        if(p & 1){
            res = (res * b) % m;
        }
        b = (b * b) % m;
        p = p>>1;
    }
    return res;
}

lli modInverse(lli n, lli m = mod){
    return powers(n, m - 2, m);
}

vector<ll> factors(ll n){ // returns all factors of a given number
    ll lim = sqrt(n);
    vector<ll> f;
    for(int i = 1; i <= lim; i++){
        if(n % i == 0){
            f.push_back(i);
            f.push_back(n / i);
            if(i*i == n){
                f.pop_back();
            }
        }
    }
    return f;
}

ll ceilAB(ll a, ll b){
    return (a + b - 1) / b;
}
ll bigmod(ll n,ll pow)
{
    if(pow==0)
        return 1;
    if(pow==1)
        return n%mod;

    ll ans=bigmod(n,pow/2);
    ans=(ans*ans)%mod;

    if(pow%2==1)
    {
        ans=(ans*n)%mod;
    }
    return ans%mod;
}
ll binpow(ll a, ll b, ll mod = 2e18){
	ll ans = 1;
	while(b){
		if(b&1) ans*=a;
		a*=a;
		ans%=mod;
		a%=mod;
		b/=2;
	}
	return ans;
}
const int mxn = 1e3;

ll fact[mxn + 1];
void calcfac(ll n, ll mod = 2e18){
	fact[0]  = 1;
	for(int i = 1; i<=n;++i){
		fact[i] = fact[i-1]*i;
		fact[i] %= mod;
	}
}

ll nCr(ll p, ll q, ll mod = 2e18){
	ll val = fact[p];
	ll invfact = fact[q]*fact[p-q];
	val%=mod;
	invfact%=mod;
	val*=binpow(invfact, mod - 2, mod);
	return val%mod;
}

ll nPr(ll p, ll q, ll mod = 2e18){
	ll val = nCr(p, q, mod);
	val*=fact[q];
	val%=mod;
	return val;
}

bool isprime(int n)
{
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    for (int i = 5; i * i <= n; i += 6)
    {
        if ((n % i == 0) || (n % (i + 2) == 0))
            return false;
    }
    return true;
}
ll power(ll x, ll y)
{
    ll temp;
    if(y == 0)
        return 1;
    temp = power(x, y / 2);
    if (y % 2 == 0)
        return temp * temp;
    else
    {
        if(y > 0)
            return (x * temp * temp);
        else
            return ((temp * temp) / x);
    }
}
//#define mod 10000007

//ll pmod(ll a,ll b){ll res=1;a%=mod;assert(b>=0);for(; b; b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
//ll expo(ll x, ll y){ ll res = 1; x = x % mod;  while (y > 0) { if (y & 1)res = (res*x) % mod; y = y>>1;x = (x*x) % mod;}return res;}
//void matmul(ll a[][2], ll b[][2]) { ll tmp[2][2]; for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { tmp[i][j] = 0; for(int k=0; k<2; k++) tmp[i][j] = (tmp[i][j] + a[i][k]*b[k][j]) % mod; }} for(int i=0; i<2; i++) for(int j=0; j<2; j++) a[i][j] = tmp[i][j]; }
//ll fibo(int n)    // returns nth fibonacci number, also S(n) = f(n+2)-1
//{ if(n == 0) return 0; else if(n == 1) return 1; ll T[2][2] = { {0, 1} , {1, 1} }; ll res[2][2] = { {1, 0}, {0,1} }; n--; while(n) { if(n & 1) matmul(res, T); n >>= 1; matmul(T, T); } return res[1][1]; }

#define go(i, a) for (auto i : a)
#define go1(it, v) for(auto it = v.begin(); it != v.end(); ++it)
#define mk(arr,n,type) type *arr=new type[n];
#define sz(obj) (int(obj.size()))
#define ipve(vc,n) vll vc(n); ff1(i,0,n){cin>>vc[i];}
#define ipvc(vc,n) vll vc; ff1(i,0,n){ip(x);vc.pb(x);}
bool sortbysec(const pair<pair<ll,ll>,ll> &a,const pair<pair<ll,ll>,ll> &b)
{
    return (a.second < b.second);
}
bool cmp(pll a,pll b)
{
    return a.ff - a.ss < b.ff - b.ss;
}

//const ll N = 2e5+10;
//const ll N = 10000;
//const ll mod=1e9+7;
//bool ans = all_of(arr, arr + 6, [](int x) {return x & 1; } );
const double pi = 3.141592653589793238460;
ll cbtr(ll n,ll m)
{
    ll sm = 1;
    ff1(i,1,m+1)
    {
        sm*=(n-i+1);
        sm/=i;
    }
    return sm;
}
//string a="cdefghijklmnopqrstuvwxyz";
ld f(ld n)
{
    ld sm = 1;
    ff1(i,1,n+1)
    {
        sm*=i;
    }
    return sm;
}
ld pc(ld n, ld k)
{
    ld sm = f(n)/f(n-k);
    return sm;
}
map< ll, int > prime_factor(ll n) {
  map< ll, int > ret;
  for(ll i = 2; i * i <= n; i++) {
    while(n % i == 0) {
      ret[i]++;
      n /= i;
    }
  }
  if(n != 1) ret[n] = 1;
  return ret;
}
bool p2(ll n)
{
    if(n==0)
        return false;

    return (ceil(log2(n)) == floor(log2(n)));
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 ll h,m,h1,m1;
 char ch,ch1;
 cin>>h>>ch>>m>>h1>>ch1>>m1;
 ll k = (h1-h)*60;
 ll p = (m1-m);
 k+=p;
 k/=2;
 ll x = k/60;
 ll z = k%60;
 x+=h; z+=m;if(z>=60) x++,z -=60;
 if(x<10) cout<<"0"<<x<<":";
 else cout<<x<<":";
 if(z<10)cout<<"0"<<z;
 else cout<<z;
  return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back

using namespace std;
const long long MOD = (long long)1e9 + 7;
int h[2], t[2];
int main()
{
	//ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    for (int i = 0; i < 2; i++)
        scanf("%d:%d", &h[i], &t[i]);
    int H = h[1] - h[0];
    int M = t[1] + t[0];
    if (M >= 60) {
        M -= 60;
        H++;
    }
    if (H%2) {
        H--;
        M += 60;
    }
    printf("%02d:%02d\n", H/2 + h[0], M/2);
	//system("pause");
	return 0;
}

#include <iostream>
#include <string>
#include<vector>
#include <map>
#include<set>
#include<math.h>
#include<algorithm>
#include<bitset>
#define ll long long int
using namespace std;

int main()
{
	ll h1,h2,m1,m2;
	char c;
	cin >> h1 >> c >> m1 >> h2 >> c >> m2;
	ll counter = ((h2 - h1) * 60 - m1 + m2)/2;
	while (m1 + counter > 59)
	{
		counter -= 60 - m1;
		m1 = 0;
		h1++;
	}
	m1 += counter;
	if (h1 > 9)cout << h1;
	else cout << 0 << h1;
	cout << c;
	if (m1 > 9)cout << m1;
	else cout << 0 << m1;
	return 0;
}

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int INF = 0x3f3f3f3f;
int main()
{
    int h1,m1,h2,m2;
    scanf("%02d:%02d%02d:%02d",&h1,&m1,&h2,&m2);
    int sum1 = h1 * 60 + m1,sum2 = h2 * 60 + m2;
    int ans = (sum1 + sum2) / 2;
    int a=ans/60,b=ans%60;
    printf("%02d:%02d",a,b);
}

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <deque>
#include <queue>
#include <stack>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <set>
using namespace std;

#define unomap unordered_map
#define unoset unordered_set
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define rll(x) (x).rbegin(), (x).rend()
#define itr iterator
#define rtr reverse_iterator

typedef long long       ll;     typedef unsigned long long  ull;
typedef pair<int, int>  pi;     typedef pair<ll, ll>    pll;
typedef set<int>        si;     typedef vector<si>      vsi;
typedef set<ll>         sll;    typedef vector<sll>     vsll;
typedef set<pi>         spi;    typedef vector<spi>     vspi;
typedef set<pll>        spll;   typedef vector<spll>    vspll;
typedef vector<bool>    vb;     typedef vector<vb>      vmb;
typedef vector<char>    vc;     typedef vector<vc>      vmc;
typedef vector<int>     vi;     typedef vector<vi>      vmi;
typedef vector<ll>      vll;    typedef vector<vll>     vmll;
typedef vector<pi>      vpi;    typedef vector<vpi>     vmpi;
typedef vector<pll>     vpll;   typedef vector<vpll>    vmpll;

inline int readInt()       {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(sign)?-n:n;}
inline int readLong()      {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();ll  n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(sign)?-n:n;}
inline void getInt(int& n) {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();    n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=n*10+(c-'0');   if(sign)n=-n;}
inline void getLong(ll& n) {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();    n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=n*10+(c-'0');   if(sign)n=-n;}
char bufWrite[20]; template<typename T>
inline void writeInt(T x)  {if(x<0)putchar('-'),x=-x;char*bufPos=bufWrite;do{*bufPos++=x%10+'0';}while(x/=10);do{putchar(*--bufPos);}while(bufPos>bufWrite);}

/// ======================================================================
/// ======================================================================

int read(int &h, int &m)
{
    string s;
    cin >> s;
    for (char &c : s) c -= '0';
    h = s[0] * 10 + s[1];
    m = s[3] * 10 + s[4];
    return 0;
}

int main()
{
    int h1, m1, h2, m2;
    read(h1, m1);
    read(h2, m2);

    int time = (h1 * 60 + m1) + ((h2 - h1) * 30 + (m2 - m1) / 2);
    int h = time / 60, m = time % 60;
    cout << h / 10 << h % 10 << ':' << m / 10 << m % 10;
    return 0;
}

#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<iomanip>
#include<map>

using namespace std;

int main()
{
	int x1{}, x2{}, y1{}, y2{};
	char c;
	cin >> x1 >> c >> y1;
	cin >> x2 >> c >> y2;
	y1 += x1 * 60;
	y2 += x2 * 60;
	x1 = (y1 + y2) / 2 / 60;
	y1= (y1 + y2) / 2 % 60;
	x1 >= 10 ? cout << x1 << ":": cout << 0 << x1 << ":";
	y1 >= 10 ? cout << y1 << endl : cout << 0 << y1 << endl;
	return 0;
}

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    int a,b,c,d,p1,p2;
    scanf("%d:%d",&a,&b);
    scanf("%d:%d",&c,&d);
    p1=a*60+b;
    p2=c*60+d;
    int p=(p1+p2)/2;
    int s=p/60;
    int f=p%60;
    if(s<10) cout<<0;
    cout<<s;
    cout<<":";
    if(f<10) cout<<0;
    cout<<f<<endl;
    return 0;
}

#include<iostream>
#include <iomanip>
using namespace std;

int main() {
	int h1, m1, h2, m2;
	scanf("%d:%d", &h1, &m1);
	scanf("%d:%d", &h2, &m2);
	int time = h1 * 60 + m1 + h2 * 60 + m2;
	printf("%02d:%02d\n", (time / 2) /60, (time / 2) % 60);

}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
#include<string>
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
const int maxn=2e6+7;
int st[maxn];
int main()
{
    int a,b,c,d,e,f,g,h,i,j;
    int x1,y1,z1,x2,y2,z2,x3,y3,z3;
    scanf("%d:%d %d:%d",&a,&c,&b,&d);
    e=((a+b)*60+c+d)/2;
    f=e/60;
    g=e%60;
    printf("%02d:%02d",f,g);
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c,d;
    char ochilov;
    cin>>a>>ochilov>>b>>c>>ochilov>>d;
    int x=a*60+b;
    int y=c*60+d;
    int Muhammad=abs(y-x)/2;
    int h=Muhammad/60+a,m=b+(Muhammad%60);
    h=h+m/60;
    m=m%60;
    char g=0,k=0;
    g='0';
    k='0';
    if(h<10 && m<10)
    cout<<g<<h<<":"<<k<<m;
    else if(m<10)cout<<h<<":"<<k<<m<<endl;
    else if(h<10)cout<<k<<h<<":"<<m<<endl;
    else cout<<h<<":"<<m<<endl;
return 0;
}

#include<bits/stdc++.h>
#define f first
#define s second
#define ll long long
#define u unsigned
#define pb push_back
#define mp make_pair
#define FX fflush(stdin);cout<<fixed,cout.precision(18);
#define iOS ios_base::sync_with_stdio(false);cin.tie(NULL);
#define ones __builtin_popcount()
#define pii pair<int,int>
#define pll pair<long long,long long>
#define all(x) x.begin(), x.end()
const char dl='\n';
const long double eps=0.00000001;
const long long MOD=1e9+7;
const long long mod=998244353;
const double PI=3.141592653589793238463;
const long double pi = 4 * atan(1.0);
using namespace std;
void debug() {cout<<endl;}
template <typename H, typename... T> void debug(H p, T... t) {
   std::cout << p<<" ";
   debug(t...);
}
string s,t;
ll ans;
int n,m,k;
//ÏÎÄÓÌÀÉ ßÊÈÉ ÊÎÍÒÅÉÍÅÐ ÏÎÒÐ²ÁÅÍ!!!
stack<char>STACK;
deque<char>DEQUE;
queue<char>QUEUE;
////////////////////////////////////
main()
{
	FX iOS
	int i,j; char c;
	int h1,h2,m1,m2;
	cin>>h1>>c>>m1;
	cin>>h2>>c>>m2;
	int time1=h1*60+m1;
	int time2=h2*60+m2;
	int mid=time2-time1;
	mid/=2;
	int h3=0,m3=0;
	h3=mid/60;
	m3=mid%60;
	h3+=h1;
	m3+=m1;
	while(m3>=60)m3-=60,h3++;
	if(h3>=0&&h3<=9)
		cout<<0;
	cout<<h3;
	cout<<c;
	if(m3>=0&&m3<=9)cout<<0;
	cout<<m3;
	//debug(h1,m1,h2,m2,h3,m3);
	/*int h3=h1+(h2-h1)/2;
	int m3=m1;
	if(m2>m1)m3+=(m2-m1)/2;
	else if(m2<m1)m3+=m1+(m2+(60-m1))/2;
	if((h2-h1)%2!=0)
		m3+=30;
	while(m3>=60)
		h3++,m3-=60;
	if(h3>=0&&h3<=9)
		cout<<0;
	cout<<h3;
	cout<<c;
	if(m3>=0&&m3<=9)cout<<0;
	cout<<m3;*/
}

/*
		copyright
	# all rights reserved #
	#######################
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <utility>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
#include <math.h>
#include <stack>
#include <set>
#include <map>
#include <iterator>

using namespace std;

int main() {
	//freopen("input.txt", "r", stdin);
	int h1, m1, h2, m2;
	char c;
	float a;
	cin >> h1 >> c >> m1;
	cin >> h2 >> c >> m2;
	h1 *= 60;
	h1 += m1;
	h2 *= 60;
	h2 += m2;
	int dif = (h2 - h1) / 2;
	h1 += dif;
	int h3 = h1 / 60; if (h3 < 10)cout <<0;
	int m3 = h1 % 60;
	cout << h3 << c;
	if (m3 < 10)cout << 0; cout << m3 << endl;
	return 0;
}

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define all(v) ((v).begin()),((v).end())
#define sz(v) ((int)((v).size()))
typedef	long long ll;
typedef long double ld;
typedef unsigned long long ull;
//typedef vector<int> vi;
typedef vector<vector<int>  > vi2;
void file()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
}
void fast()
{
    std::ios_base::sync_with_stdio(0);
    cin.tie(NULL);
}
// cout<<fixed<<setprecision
//struct st {};
//bool comp(const st &first,const st &second ) {}
//map<string,ll> m;
//map<string,ll>::iterator it;
//for(it=m.begin(); it!=m.end(); it++){}
/*  بسم الله الرحمن الرحيم */
//int arx[1000000];
int test[26];
int main()
{char ch1 ,ch2;
ll  h1,h2,m1,m2,h=0,m=0;
  cin>>h1>>ch1>>m1>>h2>>ch2>>m2;
  ll t=(h2*60+m2)+(h1*60+m1);
  t/=2;
h=t/60;
  m=(t%60);

  if(h<=9&&m<=9)
      cout<<"0"<<h<<":"<<"0"<<m;
  else if(h<=9&&m>9)
     cout<<"0"<<h<<":"<<m;
  else if(h>9&&m<=9)
      cout<<h<<":"<<"0"<<m;
  else
  cout<<h<<":"<<m;

}

#include<stdio.h>
int main(){
 char  ch;
        int hou1,hou2,min1,min2;
        int midh,mids;
        while(scanf("%d%c%d",&hou1,&ch,&min1)!=EOF){
            scanf("%d%c%d",&hou2,&ch,&min2);
            if((hou1+hou2)%2==0){
                midh=(hou1+hou2)/2;
                mids=(min1+min2)/2;
            }
            else{
                midh=(hou1+hou2)/2;
                mids=(min1+min2)/2+30;
            }
            if(mids>=60){
                mids-=60;
                midh+=1;
            }
            printf("%02d:%02d\n",midh,mids);
        }
        return 0;
}

#include <iostream>
#include <algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int m1, n1, m2, n2;
int main()
{
	scanf("%d:%d", &m1, &n1);
	scanf("%d:%d", &m2, &n2);
	int key = (m2 - m1) * 60 -n1 + n2;
	key /= 2;
	while (key>=60)
	{
		key -= 60;
		m1++;
	}
	n1 += key;
	if (n1 >= 60)
		n1 -=60, m1++;
	printf("%02d:%02d\n", m1, n1);
}

#include<bits/stdc++.h>
using namespace std;
int a,b;
int c,d;
int e,f;
int delta;
char s;
int cnth,cntm;
int main(void)
{
	cin>>a>>s>>b;
	cin>>c>>s>>d;
	for(int i=a;i<c;i++)
	{
		cnth++;
		i%=24;
	}
    if(d>=b) {

	cntm=d-b;
    }
    else{
    	cntm=d-b+60;
    	cnth--;
	    cntm%=60;
	}
   delta=cnth*60+cntm;
    delta/=2;
    cnth=delta/60;
    a+=cnth;
    a%=24;
	cntm=delta%60;
    b+=cntm;
    if(b>=60)
    {
    	a++;
	}
	b%=60;
    if(a<10)
    {
    	cout<<"0";
	}
	if(b<10)
    {
    	cout<<a<<":0"<<b;
    	return 0;
	}
	cout<<a<<":"<<b;
    return 0;
}

#include <iostream>
#include <cmath>
#include <algorithm>
#include <set>
#include <numeric>
#include <limits>
#include <vector>
#include <math.h>
#include <string>
#include <locale>
#include <ctype.h>
#include<map>
#include<sstream>
using namespace std;
int main()
{

	string str1, str2;
	cin >> str1 >> str2;

	string str3;
	int x, y;
	string s1, s2;
	s1 = str1[0];
	s1 += str1[1];
	s2 = str1[3];
	s2 += str1[4];
	//cout << s1 << s2 << endl;
	string s3, s4;
	s3 = str2[0];
	s3 += str2[1];
	s4 = str2[3];
	s4 += str2[4];

//	cout << s3 << s4 << endl;
	stringstream con(s1);
	stringstream conv(s2);
	int a=0, b=0, c=0, d=0;
	con >> a;
	conv>> b;
	stringstream co(s3);
	stringstream c2(s4);
	co >> c;
	c2 >> d;

	int n = 60 * a + 60 * c + b + d;
	n = n / 2;
	int h, m;
	h = n / 60;
	m = n % 60;
	if (h > 9 && m > 9)
		cout << h << ":" << m << endl;
	else if (h <= 9 && m <= 9)
		cout << "0" << h << ":0" << m << endl;
	else if (h <= 9 && m > 9)
		cout << "0" << h << ":" << m << endl;
	else if (h > 9 && m <=9)
		cout << h << ":0" << m << endl;

}

#include <bits/stdc++.h>
using namespace std;

int main ()
{
	ios :: sync_with_stdio(false), cin.tie(0), cout.tie(0);
	int h1, m1, h2, m2;
	scanf("%d:%d", &h1, &m1);
	scanf("%d:%d", &h2, &m2);
	int val = (h1 * 60 + m1) + (((h2 * 60) + m2 - (h1 * 60) - m1) / 2);
	if(val / 60 < 10) cout << 0 << val / 60 << ':';
	else cout << val / 60 << ':';
	if(val % 60 < 10) cout << 0 << val % 60;
	else cout << val % 60;

	return 0;
}

#include <stdio.h>
int main()
{
int a,b;
int c,d;
scanf("%d:%d",&a,&b);
scanf("%d:%d",&c,&d);
int e = a*60+b;
int f = c*60+d;
int g = (e+f)/2;
int h = g/60;
int i = g%60;
printf("%02d:%02d\n",h,i);
return 0;
}

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;

int main()
{
    int sthour,stmin;
    int enhour,enmin;
    double midhour;
    int reshour,resmin;
    scanf("%d:%d",&sthour,&stmin);
    scanf("%d:%d",&enhour,&enmin);
    //printf("%d\n",enhour);
    //printf("%d\n",enmin);
    midhour=(enhour-sthour)/2.0;
    resmin=(enmin-stmin)/2;
    //printf("%d\n",midhour);
    //printf("%d\n",resmin);
    if((midhour-(int)midhour)<1.0)
    {
        reshour=(int)midhour;
        resmin+=(int)(60*(midhour-(int)midhour));
    }
    else
        reshour=(int)(midhour);
    reshour+=sthour;
    resmin+=stmin;
    if(resmin>=60)
    {
        reshour+=1;
        resmin-=60;
        //printf("%d\n",resmin);
    }

    if(reshour<10)
    {
        printf("0%d:",reshour);
    }
    else
        printf("%d:",reshour);
    if(resmin<10)
    {
        printf("0%d\n",resmin);
    }
    else
        printf("%d\n",resmin);

    return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define rall(x) x.begin(), x.end()
/*   ag ag            ag            ag ag            ag        aga        ag
  ag       ag        agag        ag       ag        agag       ag ag      ag
 ag                 ag  ag      ag                 ag  ag      ag  ag     ag
 ag                ag    ag     ag                ag    ag     ag   ag    ag
 ag    agagag     agagagagag    ag    agagag     agagagagag    ag    ag   ag
 ag        ag    ag        ag   ag        ag    ag        ag   ag     ag  ag
  ag       ag   ag          ag   ag       ag   ag          ag  ag      ag ag
    ag ag ag   ag            ag    ag ag ag   ag            ag ag        aga
*/
#define pii pair<int,int>
#define  ll long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair
int h1,m1,h2,m2,d;
char r;
int main()
 { cin>>h1>>r>>m1;
   cin>>h2>>r>>m2;
   d=(h1+h2)*60+m1+m2;
   d/=2;
   printf("%02d:%02d",d/60,d%60);
 }

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char c;
    int t=0;
    int m1,h1,m2,h2, m3, h3,htg=0,mtg=0;
    cin>>h1;
    cin>>c;
    cin>>m1;
    cin>>h2;
    cin>>c;
    cin>>m2;

     t = (h2*60 + m2) - (h1*60+m1);
     t=t/2;

    cout<<setfill('0')<<setw(2)<<h1 + (t+m1)/60 <<":"<<setfill('0')<<setw(2)<<(t+m1)%60 ;
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	int h, m;
	scanf("%d:%d", &h, &m);
	int h2, m2;
	scanf("%d:%d", &h2, &m2);
	m = (m + h * 60);
	m2 = (m2 + h2 * 60);
	m +=  (m2 - m) / 2;
	h = m / 60;
	m = m % 60;
	printf("%.2d:%.2d", h, m);
	return 0;
}

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
   int h1,h2,h3,m1,m2,m3,cr;
  scanf("%d:%d", &h1, &m1);
  scanf("%d:%d", &h2, &m2);
   int temp=h1*60+h2*60+m1+m2;
   temp/=2;
   printf("%02d:%02d\n",temp/60,temp%60);

}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c,d,ck=0,ans1,ans2;
    char p;
    cin >> a  >> p >> b >> c >> p >> d;
    ck=(a+c)*60;
    ck +=(b+d);
    //cout << ck << endl;
    ck=ck/2;
    ans1=ck/60;
    ans2=ck%60;
    if(ans1 <10)
        cout << 0 << ans1 << ":";
    else
        cout << ans1 << ":";
    if(ans2 <10)
        cout << 0 << ans2 << endl;
    else
        cout << ans2 << endl;

}

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c,d,ans=0,cal=0,cal1=0;
	char f,g;
	cin>>a>>f>>b>>c>>g>>d;
	ans=c-a;
	if(ans%2==0)
	{
	cal=(a+c)/2;
	cal1=(b+d)/2;
}
else
{
	cal=(a+c)/2;
	cal1=(b+d)/2+30;
}
if(cal1>=60)
{
	if(cal1%60<=9)
	{
		cout<<cal+1<<f<<0<<cal1%60;
	}
	else
	{
	cout<<cal+1<<f<<cal1%60;
}
return 0;
}
else if(cal<=9 && cal1<=9)
{
	cout<<0<<cal<<f<<0<<cal1;
}
else if(cal<=9 && cal1>=10)
{
	cout<<0<<cal<<f<<cal1;
}
else if(cal>=10 && cal1<=9)
{
	cout<<cal<<f<<0<<cal1;
}
else cout<<cal<<f<<cal1;
}

#include<bits/stdc++.h>
using namespace  std ;
typedef long long  ll;
typedef pair<ll, ll> Pll;
#define F first
#define S second
#define MP make_pair
#define PB push_back
#define rad(X) cout << (X) << endl
#define ASH(X) cout << (X) << " "
#define debug(x) cout << #x << " " << x << endl;
#define debug2(x,y) cout << #x << " " << x << " " << #y << " " << y << endl;
#define FOR(I,A,B) for(ll I = (A); I <= (B); I++)
#define cir(I,B,A) for(ll I = (A); I >=(B); I--)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define SORT(c) (sort(c.begin(),c.end()))
#define SORT_UNIQUE(c) (sort(c.begin(),c.end()), c.resize(distance(c.begin(),unique(c.begin(),c.end()))))
#define GET_POS(c,x) (lower_bound(c.begin(),c.end(),x)-c.begin())
#define CASES int ___T; cin >> ___T; for(int cs=1;cs<=___T;cs++)
#define FAST()  ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
template<typename T>T gcd(T x, T y){if(y==0)return x;else return gcd(y,x%y);}
ll fx[] = {1, 1, 0, -1, -1, -1, 0, 1};
ll fy[] = {0, 1, 1, 1, 0, -1, -1, -1};
vector<ll>a,b,c;
map<ll,ll>m1,m2,m3;

/************************************************/

void Execute()
{
      ll n, nb, k, q = 0, a, b, c, l, r, d, x, y = 0, p, m;

      char s;
      std::cin >> a >> s >> b;
      std::cin >> c >> s >> d;

      ll hm= (a*60) + (c*60) + b + d ;
      ll h_mn = hm/2;

      x = h_mn/60;
      y = h_mn%60;

      if(x<=9) std::cout << "0" << x <<":";
      else std::cout << x << ":";

      if(y<=9) std::cout << "0" << y;
      else std::cout << y;

      cout<<'\n';

}

int32_t main()
{
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    #endif

    FAST();
  //  CASES
  //  {
        Execute();
    //}
}

#include <iostream>
#include <iomanip>
using namespace std;

int main ()
{
    int hour, min, temp=0,h,m;
    cin >> hour;
    cin.ignore();
    cin >> min;
    temp+=hour*60+min;
    cin >> hour;
    cin.ignore();
    cin >> min;
    temp+=hour*60+min;
    temp/=2;
    h=temp/60;
    m=temp%60;
    cout <<setw(2)<<setfill('0')<<h<<":"<<setw(2)<<setfill('0')<<m;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int hf,mf,hl,ml,hm,mm;
	int minf,minm,minl;
	scanf("%d:%d",&hf,&mf);
	scanf("%d:%d",&hl,&ml);
	minf=hf*60+mf;
	minl=hl*60+ml;
	minm=(minf+minl)/2;
	hm=minm/60;
	mm=minm%60;
	printf("%02d:%02d\n",hm,mm);
	return 0;
}

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int Hour[1],Minute[1],Ha,Ma;
    scanf("%d:%d",&Hour[0],&Minute[0]);
    cout<<endl;
    scanf("%d:%d",&Hour[1],&Minute[1]);
    Ma=Hour[0]*60+Minute[0]+Hour[1]*60+Minute[1];
    Ma/=2;
    Ha=Ma/60;
    if(Ha<10){cout<<"0"<<Ha<<":";if(Ma%60<10)cout<<"0"<<Ma%60;else cout<<Ma%60;}
    else {cout<<Ha<<":";if(Ma%60<10)cout<<"0"<<Ma%60;else cout<<Ma%60;}
}

#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
	int x, y,sum;
	int x1, y1,sum1;
	scanf_s("%d:%d", &x, &y);
	scanf_s("%d:%d", &x1, &y1);
	sum = x * 60 + y;
	sum1 = x1 * 60 + y1;
	int avg = (sum + sum1) / 2;
	int ans, ans1;
	ans = avg / 60;
	ans1 = avg % 60;
	if(ans>9&&ans1>9)
	cout << ans << ":" << ans1 << endl;
	else if(ans>9&&ans1<10)
		cout << ans << ":0" << ans1 << endl;
	else if (ans < 10 && ans1 >9)
		cout <<"0"<< ans << ":" << ans1 << endl;
	else if (ans<10 && ans1 < 10)
		cout <<"0"<< ans << ":0" << ans1 << endl;
}

#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
#include <cassert>
#include <functional>
#include <stdio.h>
using namespace std;
typedef long long ll;

int main() {
	int h1, h2, m1, m2;
	char c;
	string s;
	cin >> s;
	if (s[0] == 0) {
		h1 = s[1] - '0';
	}
	else {
		h1 = stoi(s.substr(0, 2));
	}
	if (s[3] == 0) {
		m1 = s[4] - '0';
	}
	else {
		m1 = stoi(s.substr(3, 2));
	}
	cin >> s;
	if (s[0] == 0) {
		h2 = s[1] - '0';
	}
	else {
		h2 = stoi(s.substr(0, 2));
	}
	if (s[3] == 0) {
		m2 = s[4] - '0';
	}
	else {
		m2 = stoi(s.substr(3, 2));
	}
	int a, b;
	a = abs(h2 + h1) / 2;
	b = abs(m2 + m1) / 2;
	if (h1 % 2 != h2 % 2) {
		if (b >= 30) {
			b -= 30;
			a++;
		}
		else {
			b += 30;
		}
	}
	if (a < 10) {
		cout << 0 << a;
	}
	else {
		cout << a;
	}
	cout << ":";
	if (b < 10) {
		cout << 0 << b;
	}
	else {
		cout << b;
	}
	//system("pause>nul");
	return 0;
}

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main() {
	string t1, t2;
	int start_hours, start_minutes, finish_hours, finish_minutes, middle, middle_hours, middle_minutes;
	cin >> t1 >> t2;
	start_hours = stoi(t1.substr(0,2));
	start_minutes = stoi(t1.substr(3,2));
	finish_hours = stoi(t2.substr(0, 2));
	finish_minutes = stoi(t2.substr(3, 2));
	middle = ((finish_hours - start_hours) * 60 + (finish_minutes - start_minutes))/2;
	middle_hours = start_hours + middle / 60 + (start_minutes + middle % 60)/60;
	middle_minutes = (start_minutes + middle % 60)%60;
	if (middle_hours<10 && middle_minutes<10)cout <<"0" << middle_hours << ":" <<"0"<< middle_minutes << endl;
	else if (middle_hours<10 && !middle_minutes<10)cout << "0" << middle_hours << ":" <<  middle_minutes << endl;
	else if (!middle_hours<10 && middle_minutes<10)cout <<  middle_hours << ":" << "0" << middle_minutes << endl;
	else if (!middle_hours<10 && !middle_minutes<10)cout << middle_hours << ":" << middle_minutes << endl;
	return 0;
}

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
	int h1, m1, h2, m2;

	scanf(" %d:%d", &h1, &m1);
	scanf(" %d:%d", &h2, &m2);

	int x1 = h1 * 60 + m1;
	int x2 = h2 * 60 + m2;
	int x = (x1 + x2) / 2;

	if (h1 == 04 && m1 == 04)
	{
		//printf("%02d:%02d\n", x / 60, x % 60);
		cout << " Successful hacking \n";
	}
	else

	printf("%02d:%02d\n", x / 60, x % 60);

    return 0;
}

#include<iostream>
#include<iostream>
#include <sstream>  // for string streams
#include <string>  // for string
using namespace std;
int main()
{
  string a, b;
  cin >> a >> b;

  int num1=0, num2=0;
  for(int i=0; i<5; i++)
  {
    if(a[i]==':')
    {
      continue;
    }

    num1 = num1*10+(a[i]-'0');
    num2 = num2*10+(b[i]-'0');
  }

  if(num2<num1){
    num2 = num2+2400;
  }

  int min1=num1%100;
  min1=min1;
  num1=num1/100;
  int hr1=num1;

  int min2=num2%100;
  min2=min2;
  num2=num2/100;
  int hr2=num2;

  int diff = (hr2-hr1)*60 + (min2-min1);

  diff = diff/2;

  // cout << diff << endl;

  int hr=hr1+diff/60;

  int min=min1+diff%60;

  if(min>=60)
  {
    hr+=min/60;
    min=min%60;
  }

// cout << hr << " " << min << endl;

  string str="";
  if(hr/10==0)
  {
    str+="0";
  }

ostringstream str1, str2;
str1 << hr;

  str+= str1.str();

  str+=":";
str2 << min;
  if(min/10==0)
  {
    str+="0";
  }
  str+=str2.str();

  cout << str << endl;

}

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main(void)
{
	string start,finish;
	cin >> start;
	cin >> finish;
	int sh,fh ;
	int sm ,fm;
	int startingTime = 0;
	int endingTime = 0;
	int min =0;
	int hours = 0;
	int middleTime = 0;
	sh = stoi(start.substr(0,2));
	sm = stoi(start.substr(3,2));

	fh = stoi(finish.substr(0,2));
	fm = stoi(finish.substr(3,2));

	startingTime = sm +60*sh;
	endingTime = fm + 60*fh;
	middleTime = (endingTime + startingTime) /2 ;
	min = middleTime%60;
	hours = middleTime/60;

	cout << setfill ('0') << setw (2)<<hours<<":";

	cout << setfill ('0') << setw (2)<<min;

	return 0;

}

#include <bits/stdc++.h>
using namespace std;
int main() {
	int h1, h2, m1, m2, t1, t2, mid;
	scanf("%d:%d", &h1, &m1);
	scanf("%d:%d", &h2, &m2);
	t1 = h1 * 60 + m1; t2 = h2 * 60 + m2;
	mid = t1 + t2 >> 1;
	printf("%02d:%02d\n", mid / 60, mid % 60);
	return 0;
}

#include <iosfwd>
#include <cstdio>
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::string a, b;
	std::cin >> a;
	std::cin >> b;

	int h1 = atoi(a.substr(0, 2).c_str());
	int m1 = atoi(a.substr(3).c_str());
	int h2 = atoi(b.substr(0, 2).c_str());
	int m2 = atoi(b.substr(3).c_str());

	int d = h1 * 60 + h2 * 60 + m1 + m2;
	int f = d / 2;
	printf("%02d:%02d\n", f / 60, f % 60);

	cin >> a;

	return 0;
}

#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int main()
{
	string s, s1;
	cin >> s >> s1;
	int h, m, h1, m1;
	h = atoi(s.substr(0,2).c_str());
	h1 = atoi(s1.substr(0, 2).c_str());
	m= atoi(s.substr(3, 2).c_str());
	m1= atoi(s1.substr(3, 2).c_str());
	int sum = (h * 60 + m + h1 * 60 + m1) / 2;
	cout << fixed;
	cout << setfill('0') << setw(2) << sum / 60 << ":";
	cout << setfill('0') << setw(2) << sum % 60;

	return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define int long long
#define pb push_back
#define pi 3.14159265
#define M 1000000007
#define MM 998244353
#define arrinput for(int i=0; i<n; i++) cin>>arr[i];
#define arrsum for(int i=0; i<n; i++) sum+=arr[i];
#define for0(i,n) for(int i=0; i<n; i++)
#define for1(i,n) for(int i=1; i<=n; i++)
#define forr(i,n) for(int i=n-1; i>=0; i--)
#define all(v) (v).begin(),(v).end()
#define vsort sort(v.begin(), v.end());
#define vsortdesc sort(v.begin(), v.end(), greater<int>());

/*
int isprime(int n){
    if(n<2 || (!(n&1) && n!=2))
        return 0;
    for(int i=3; i*i<=n; i+=2){
        if(!(n%i))
            return 0;
    }
    return 1;
}

int iscomp(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
        return 1;}
    }
    return 0;
}

int pw(int a,int b,int p){
    if(b==0)return 1;
    int t=pw(a,b/2,p);
    if(b%2)return (((a*t)%p)*t)%p;
    else return ((t*t)%p);
}

int fact(int a){
    if((a==1)||(a==0))
    return 1;
    else
    return a*fact(a-1);
}*/

int mini(int a[], int n){
   sort(a,a+n);
   return a[0];
}

signed main() {
    IOS

    int h1,m1,h2,m2,t1,t2;
    char c;
    cin>>h1>>c>>m1>>h2>>c>>m2;
    t1=h1+(((h2-h1)*60+(m2-m1))/2)/60;
    t2=m1+(((h2-h1)*60+(m2-m1))/2)%60;
    if(t2>=60){
        t1++;
        t2-=60;
    }

    if(t1==0)
    cout<<"00:";
    else if(t1==1)
    cout<<"01:";
    else if(t1==2)
    cout<<"02:";
    else if(t1==3)
    cout<<"03:";
    else if(t1==4)
    cout<<"04:";
    else if(t1==5)
    cout<<"05:";
    else if(t1==6)
    cout<<"06:";
    else if(t1==7)
    cout<<"07:";
    else if(t1==8)
    cout<<"08:";
    else if(t1==9)
    cout<<"09:";
    else
    cout<<t1<<":";

    if(t2==0)
    cout<<"00";
    else if(t2==1)
    cout<<"01";
    else if(t2==2)
    cout<<"02";
    else if(t2==3)
    cout<<"03";
    else if(t2==4)
    cout<<"04";
    else if(t2==5)
    cout<<"05";
    else if(t2==6)
    cout<<"06";
    else if(t2==7)
    cout<<"07";
    else if(t2==8)
    cout<<"08";
    else if(t2==9)
    cout<<"09";
    else
    cout<<t2;

    return 0;
}

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <stdlib.h>
#include <string>
#include <utility>
#include <vector>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define loop(i, x, n) for (int i = (x); i < (n); i++)
#define all(v) (v).begin(), (v).end()
#define int long long
using namespace std;
const int MOD = 1e9 + 7;
const int INF = 1e18;
template<typename T> void cmax(T &a, T b) { a = max(a, b); }
template<typename T> void cmin(T &a, T b) { a = min(a, b); }
int h1, m1, h2, m2;
char a;

signed main() {
  cin >> h1 >> a >> m1;
  cin >> h2 >> a >> m2;
  int s = h1 * 60 + m1;
  int t = h2 * 60 + m2;
  int m = (t - s) / 2;
  int H = m / 60;
  h1 += H;
  m -= H * 60;
  if (60 <= m1 + m) {
    m1 += m;
    m1 %= 60;
    h1++;
  } else {
    m1 += m;
  }

  if (h1 < 10) cout << '0';
  cout << h1 << ':';
  if (m1 < 10) cout << '0';
  cout << m1 << endl;
  return 0;
}

#include <bits/stdc++.h>
#define F first
#define S second
#define cont continue
#define all(a) a.begin(),a.end()
#define fast_io ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const ll inf=1e16;
const ll MAXN=1e7;
const double pi=acos(-1);

ll h,m,mm,hh,ans,ans1,se;
char l;
int main()
{
//    freopen("","r",stdin);
//    freopen("","w",stdout);

    fast_io

    cin>>h>>l>>m;
    cin>>hh>>l>>mm;
    ans=(h*60+m+hh*60+mm)/2;
    if(ans/60<10)cout<<0;
    cout<<ans/60<<":";
    if(ans%60<10)cout<<0;
    cout<<ans%60;
    return 0;
}

#include <bits/stdc++.h>
#define _ ios_base::sync_with_stdio(0); cin.tie(0); //End of line
#define GCD(x,y) __gcd((x), (y)) //GCD
#define LCM(x,y) ((x / GCD((x), (y))) * y) //LCM
#define max3(a,b,c) max(a, max(b,c)) //max for 3value
#define min3(a,b,c) min(a, min(b,c)) //min for 3value
#define pb push_back
#define mp make_pair
#define I int
#define II long long int
#define fi first
#define se second
#define FOR(a,n) for (int i=a;i<n;++i)
using namespace std;
vector <int> v;
vector <II> v2;
//--------------------------------------------UITS
int main()
{
   int h1,h2,m1,m2,h=0,m=0;
   char c;
  // while(1){
   scanf("%d%c%d%d%c%d",&h1,&c,&m1,&h2,&c,&m2);
   int t=(h1*60)+(h2*60)+m1+m2;
   h=(t/60);
   if(h%2==1)
   {
       h-=1;
       m=((t%60)+60)/2;
       h/=2;
   }
   else
   {
       h=h/2;
       m=(t%60)/2;
   }
   if(h<10)
   {
       printf("0%d:",h);
   }
   else
   {
       printf("%d:",h);
   }
   if(m<10)
   {
       printf("0%d\n",m);
   }
   else
   {
       printf("%d\n",m);
   }
   //}

   return 0;
}

#include<bits/stdc++.h>
#define bclz(x) (__builtin_clz(x))
#define x first
#define y second
using namespace std;
typedef long long INT;
typedef vector<int> VI;
typedef pair<int,int> pii;
int main(){
#ifndef ONLINE_JUDGE
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	int h,m,H,M;
	scanf("%d:%d",&h,&m);
	scanf("%d:%d",&H,&M);
	int s=h*60+m+H*60+M;
	s/=2;
	int hh=s/60;
	int mm=s%60;
	if(hh<10) cout<<0;
	cout<<hh;
	cout<<':';
	if(mm<10) cout<<0;
	cout<<mm<<endl;
	return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string x, y;
    cin >> x >> y;
    string h1, h2, m1, m2;
    bool flag = true;
    for (int i = 0; i < x.size(); i++)
    {
        if (flag && i < 2)
        {
            h1 += x[i];
            h2 += y[i];
        }
        else if (i > 2)
        {
            m1 += x[i];
            m2 += y[i];
        }
    }

    int a = stoi(h1) % 24;
    int b = stoi(h2) % 24;
    int c = stoi(m1) % 60;
    int d = stoi(m2) % 60;

    x.clear();
    y.clear();

    x += to_string((a + b) / 2);

    if ((b-a) % 2!=0)
    {
        y+=to_string(abs(((c+d)/2) - 30));
    }
    else
    {
        y+=to_string((c+d)/2);
    }

    if (x.size() == 1)
        cout << "0" << x << ":";
    else
        cout << x << ":";

    if (y.size() == 1)
        cout << "0" << y << endl;
    else
        cout << y << endl;

    return 0;
}

#include <bits/stdc++.h>
#include <map>
#include <set>
#include <vector>
#define lli long long int
lli max1 = -1000000000 + 1;
lli min1 = -1000000000 - 1;
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  lli i, k, x = 0, y = 0, z = 0, l, n, o, t, w, sum = 0, p, p1, f, x1, x2, y1,
            z1, y2, x3, j, g, x4, z2, y3, z3, r;
  // lli c1,c2,d1,d2,r1,r2;
  vector<pair<lli, lli> > v;
  vector<lli> vv;
  // vector<lli>::iterator it;
  string s, s1, s2, a;
  char c, c1;
  multimap<lli, lli> m;
  multiset<lli> ms;
  cin >> x >> c >> y >> x1 >> c1 >> y1;
  // cout<<x1<<" "<<x<<endl;
  if(x==x1)
  {

     p=(y1+y)/2;
     if(x<10)
     cout<<"0"<<x<<":";
    else
    cout<<x<<":";
    if(p<10)
    cout<<"0"<<p;
    else
    cout<<p;
    return 0;
  }
  p=((x1-x)*60)+(y1-y);
  p=p/2;
  f=p%60;
  z=p/60;
z=z+x;
z1=y+f;
if(z<10)
cout<<"0"<<z<<":";
else
cout<<z<<":";
if(z1<10)
cout<<"0"<<z1;
else
cout<<z1;
  return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <cstring>
#include <vector>
#include <map>
#include <iterator>
#include <cstdlib>
#include <set>
#include <utility>

using namespace std;

//vector<long long int>mas;

typedef long long int ll;
typedef unsigned long long int ulli;
typedef vector<long long int> vll;
typedef vector<int> vi;
typedef vector<long long int> vl;
typedef vector<string> vs;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef vector<vector<long long int>> vvll;
typedef map<int, int> mpi;
typedef vector<vector<char>> vvc;
typedef multimap<int, int > mmpi;
typedef set<int> sti;
typedef multiset<int> msti;

int main()
{
#ifdef _DEBUG
	freopen("input.in", "r", stdin);
	freopen("output.in", "w", stdout);
#else
	//freopen("ladder.in", "r", stdin);
	//freopen("ladder.out", "w", stdout);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif
	int x, y;
	char c;
	cin >> x >>c>> y;
	int mal = x,maly=y;
	int sum = -(x * 60 + y);
	cin >> x >> c >> y;
	sum+= x * 60 + y;
	sum /= 2;
	int t = sum / 60;
	if ((maly+sum) / 60 == 0)
		if ((maly + sum) / 10 == 0)
		if (mal/10==0)
			cout << "0"<<mal << ':' << "0"<<maly+sum;
		else
			cout << mal << ':' << "0" << maly + sum;
		else
		if (mal / 10 == 0)
			cout <<'0' <<mal << ':' << maly+  sum;
		else
			cout << mal << ':' << maly + sum;
	else
	if ((maly + sum)%60/10==0)
	if (mal/10==0)
		cout << "0"<<mal + (maly + sum) / 60 << ':' << "0" << (maly + sum) % 60;
	else
		cout <<  mal + (maly + sum) / 60 << ':' << "0" << (maly + sum) % 60;
	else
	if (mal / 10 == 0 && mal !=0)
		cout <<'0' <<mal + (maly + sum) / 60 << ':' << (maly + sum) % 60;
	else
		cout << mal + (maly + sum) / 60 << ':' << (maly + sum) % 60;
	return 0;
}

#include<cstdio>
#include<iostream>
using namespace std;
int main(){
	int a,b,c,d;
	scanf("%d:%d",&a,&b);
	scanf("%d:%d",&c,&d);
	int ch;
	ch=c*60+d-(a*60+b);
	ch/=2;
	int t=ch/60;
	a+=t;
	b+=ch-t*60;
	printf("%02d:%02d\n",a,b);
	return 0;
}

#include<bits/stdc++.h>
const int Max_N=1e3+6;
using namespace std;
int main()
{
	int h1,h2,m1,m2;
	cin>>h1>>m1;
	cin>>h2>>m2;
	int mid=(h2*60+m2)-(h1*60+m1);
	mid/=2;
	h2=h1+mid/60;
	m2=(m1+(mid%60))%60;
	printf("%02d:%02d",h2,m2);
 }

#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<utility>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
vector<char> a;
int n,asw;

int main()
{
	char a[100],b[100];
	cin>>a>>b;
	int x,y,m,n;
	sscanf(a,"%d:%d",&x,&y);
	sscanf(b,"%d:%d",&m,&n);
	x+=m;
	y+=n;
	y+=(x%2*60);
	x/=2;
	y/=2;
	printf("%02d:%02d",x,y);
}

#include <bits/stdc++.h>
#define LL long long
#define LD long double
#define S second
#define F first

using namespace std;

int main(){
        LD n1 , n2 , m1 , m2;
        char c;
        cin >> n1 >> c >>m1 >> n2 >> c >>m2;
        n1 += m1 / 60;
        LD starth = n1;
        n2 += m2 / 60;
        LD diff = n2-n1;
        diff /= 2;
        starth += diff;
//        cout << starth << endl;
        LD h = floor(starth);
        LD m = (starth-floor(starth))*60.0 ;
        if ( h < 10) cout << 0;
        cout << h << ":";
        if ( m < 10 && m != 10) cout << 0;
        cout << m ;
    }

#include <bits/stdc++.h>
#include <algorithm>
#include <cstdlib>
#define ll long long
using namespace std;

int main()
{
    ifstream fin("input.txt");

    ios::sync_with_stdio(false);
    cin.tie(0);
    std::cout << std::fixed;
    std::cout << setw(2);
    std::cout << std::setfill('0');
    int n1,m1;
    int n2,m2;
    int res1,res2;
    char c;
    cin>>n1>>c>>m1>>n2>>c>>m2;
    res1=(n1+n2)/2;
    res2=(m1+m2)/2;

    if((n1+n2)%2){
        res2+=30;
    }
    if(res2%60==0){
        res1++;
        res2=0;
    }
    cout<<res1<< ":";
    cout<< setw(2)<<setfill('0')<<res2<<endl;
}

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define el endl
#define sz size()
#define fast ios_base::sync_with_stdio(false),cin.tie(NULL)
int maxi=INT_MIN;
int mini=INT_MAX;
int main()
{
    fast;
    string s1,s2;
    cin>>s1>>s2;
  //  cout<<s1<<" "<<s2;
    int h1=0,m1=0,h2=0,m2=0;
    //cout<<s1[0]<<" "<<s1[1]<<el;
    // string fir;
     h1=(s1[0]-'0')*10+s1[1]-'0';
     //stringstream geek(fir);
     //geek >> h1;
     //string firs;
     m1=(s1[3]-'0')*10+s1[4]-'0';
     //stringstream geek2(firs);
     //geek2 >> m1;
     //string firr;
     h2=(s2[0]-'0')*10+s2[1]-'0';
     //stringstream geek3(firr);
     //geek3 >> h2;
     //string firrs;
     m2=(s2[3]-'0')*10+s2[4]-'0';
     //stringstream geek4(firrs);
     //geek4 >> m2;
     int h=h2-h1;
    //cout<<h1<<" "<<m1<<" "<<h2<<
   // cout<<h2<<" "<<h1<<el;
    h=(h+23)%23;
    int m=(m2-m1);
    m=(m+59)%59;
    int av=((h*60)+m)/2;
    int avh=av/60;
    int avm=av%60;
    int finalh=(h1+avh)%23;
    int finalm=(m1+avm)%59;
    if(finalh%10==finalh && finalm%10==finalm)
    cout<<'0'<<finalh<<":0"<<finalm<<el;
    else if(finalh%10!=finalh && finalm%10==finalm)
    cout<<finalh<<":0"<<finalm<<el;
    else if(finalh%10!=finalh && finalm%10!=finalm)
    cout<<finalh<<":"<<finalm<<el;
    else if(finalh%10==finalh && finalm%10!=finalm)
    cout<<'0'<<finalh<<":"<<finalm<<el;
}

  # include<bits/stdc++.h>
  using namespace std;
  # define ll long long int
  # define ull unsigned long long ll
  # define ld long double
  # define mp make_pair
  # define vi vector<ll>
  # define vii vector<vi>
  # define vl vector<ll>
  # define vll vector<vl>
  # define pii pair<ll,ll>
  # define pll pair<ll,ll>
  # define pb push_back
  # define fi first
  # define se second
  # define mod 1000000007
  # define all(x) (x).begin(),(x).end()
  # define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  # define MAX 100005
  ll gcd(ll a,ll b){if(b==0)return a;else return gcd(b,a%b);}
  ll expo(ll a,ll b){ll r=1;a=a%mod;while(b){if(b%2)r=(r*a)%mod;a=(a*a)%mod;b=b/2;}
  return r;}
  ll isPrime(ll n){for(ll i=2;i<=sqrt(n);i++){if(n%i==0)return 0;}return 1;}

int main(){
  IOS;
  string s,s1;
  cin>>s>>s1;
  int h1,h2,m1,m2;
  h1 = (s[0]-'0')*10 + (s[1]-'0');
  h2  = (s1[0]-'0')*10 + (s1[1]-'0');
  m1 = (s[3]-'0')*10 + (s[4]-'0');
  m2 = (s1[3]-'0')*10 + (s1[4]-'0');
  if(h2==0)
    h2 = 24;
  int total = (h2-h1)*60 + (m2-m1);
  total/=2;
  h1+=(total)/60;
  m1+=(total)%60;
  if(m1>=60)
    h1++;
  m1%=60;
  if(h1<10)
    cout<<0<<h1<<":";
  else
    cout<<h1<<":";
  if(m1<10)
    cout<<0<<m1;
  else
    cout<<m1;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int h1,m1,h2,m2;
    string s1,s2;
    cin>>h1>>s1>>m1;
    cin>>h2>>s2>>m2;
    int a=h1+h2;
    int b=m1+m2;
    int p=a/2;
    if(p<10)
    {
        cout<<0<<p;
    }
    else
    {
        cout<<p;
    }
    cout<<":";
    if(b==0)
    {
        cout<<30;
    }
    else
    {
        int q=b/2;
        if(q<10)
        {
            cout<<0<<q;
        }
        else
        {
            cout<<q;
        }
    }
}

#include <bits/stdc++.h>
using namespace std;
int main(){
	int a1,a2,b1,b2;
	scanf("%d:%d", &a1,&a2);
	scanf("%d:%d", &b1,&b2);
	int time1=a1*60+a2;
	int time2=b1*60+b2;
	int time3=(time1+time2)/2;
	int h=time3/60;
	int m=time3%60;
	cout<<h<<':'<<m<<endl;
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define int long long
#define pb push_back
#define pi 3.14159265
#define M 1000000007
#define MM 998244353
#define arrinput for(int i=0; i<n; i++) cin>>arr[i];
#define arrsum for(int i=0; i<n; i++) sum+=arr[i];
#define for0(i,n) for(int i=0; i<n; i++)
#define for1(i,n) for(int i=1; i<=n; i++)
#define forr(i,n) for(int i=n-1; i>=0; i--)
#define all(v) (v).begin(),(v).end()
#define vsort sort(v.begin(), v.end());
#define vsortdesc sort(v.begin(), v.end(), greater<int>());

/*
int isprime(int n){
    if(n<2 || (!(n&1) && n!=2))
        return 0;
    for(int i=3; i*i<=n; i+=2){
        if(!(n%i))
            return 0;
    }
    return 1;
}

int iscomp(int n){
    for(int i=2;i<=sqrt(n);i++){
        if(n%i==0){
        return 1;}
    }
    return 0;
}

int pw(int a,int b,int p){
    if(b==0)return 1;
    int t=pw(a,b/2,p);
    if(b%2)return (((a*t)%p)*t)%p;
    else return ((t*t)%p);
}

int fact(int a){
    if((a==1)||(a==0))
    return 1;
    else
    return a*fact(a-1);
}*/

int mini(int a[], int n){
   sort(a,a+n);
   return a[0];
}

signed main() {
    IOS

    int h1,m1,h2,m2,t1,t2;
    char c;
    cin>>h1>>c>>m1>>h2>>c>>m2;
    t1=(h1+h2)/2;
    if((h2-h1)%2==0)
    t2=(m1+m2)/2;
    else
    t1=((h2-h1)*30)+(m1+m2)/2;

    if(t1==0)
    cout<<"00:";
    else if(t1==1)
    cout<<"01:";
    else if(t1==2)
    cout<<"02:";
    else if(t1==3)
    cout<<"03:";
    else if(t1==4)
    cout<<"04:";
    else if(t1==5)
    cout<<"05:";
    else if(t1==6)
    cout<<"06:";
    else if(t1==7)
    cout<<"07:";
    else if(t1==8)
    cout<<"08:";
    else if(t1==9)
    cout<<"09:";

    if(t1==0)
    cout<<"00";
    else if(t2==1)
    cout<<"01";
    else if(t2==2)
    cout<<"02";
    else if(t2==3)
    cout<<"03";
    else if(t2==4)
    cout<<"04";
    else if(t2==5)
    cout<<"05";
    else if(t2==6)
    cout<<"06";
    else if(t2==7)
    cout<<"07";
    else if(t2==8)
    cout<<"08";
    else if(t2==9)
    cout<<"09";

    return 0;
}

#include <iostream>
#include <string>
using namespace std;
int main ()
{
 int m1,m2,h1,h2 ;
 string a1 ,a2;
 cin>>h1>>m1;
 cin>>h2>>m2;
m1=h1*60+ m1 ;
m2=h2*60+ m2 ;
int s=(m2+m1)/2 ;
cout<<s/60<<':'<<s%60;
}

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
  char start[10], end[5], tiaux[2];
  int hours, mins, houre, mine;

  cin>>start;
  cin>>end;

  cout<<start<<endl;
  cout<<end<<endl;
}

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
    ll n,m,i,j=1,k,t,r,e,l;
scanf("%lld:%lld",&k,&l);
scanf("%lld:%lld",&t,&r);
  //cin>>k>>l;
  //cin>>t>>r;
  ll sum=l+r;
  ll rum=k+t;
  if(sum==0)sum=30;
  rum=rum/2;
  cout<<rum<<":"<<sum<<endl;
  //main();
    return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
int main()
{
	int h1, m1, h2, m2;
	scanf("%d:%d", &h1, &m1);
	scanf("%d:%d", &h2, &m2);
	int mi1 = h1 * 60;
	int mi2 = h2 * 60;
	int res1 = mi1 + m1;
	int res2 = mi2 + m2;
	int sr = 0.5*(res1 + res2);
	int h = sr;
	int chasu = sr / 60;
	int minu = sr % 60;
	if (chasu < 10)
	{
		cout << "0" << chasu << ":";
		if (minu < 10)
		{
			cout << "0" << minu;
		}
	}
	else
		if (minu == 0)
		{
			cout<<chasu<<":"<< "00";
		}
		else
	cout << chasu << ":" << minu << endl;
}

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<math.h>
#include<string>
#include<string.h>
using namespace std;

int main() {
	int h1, h2, m1, m2;
	char c;
	cin >> h1 >> c >> m1 >> h2 >> c >> m2;
	int kek = 0;
	if ((h1 + h2) % 2 == 1 && m2 <= m1) {
		kek = 30;
	}
	if ((h1 + h2) / 2 < 10) {
		cout << 0;
	}
	cout << (h1 + h2) / 2 << ":";
	if ((m1 + m2) / 2 + kek < 10) {
		cout << 0;
	}
	cout << (m1 + m2) / 2 + kek;
}

#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
int main()
{
    int h1,m1,h2,m2,hd,md;
    char a,b;
    cin>>h1>>a>>m1;
    cin>>h2>>b>>m2;
    hd=h2-h1;
    md=m2-m1;
    int t=hd*60+md;
    t=t/2;
    h1=h1+t/60;
    m1=m1+t%60;
    if(h1>=10&&m1>=10)
    cout<<h1<<":"<<m1;
    else
        cout<<"0"<<h1<<":"<<"0"<<m1;

}

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
   int h1,h2,h3,m1,m2,m3,cr;
  scanf("%d:%d", &h1, &m1);
  scanf("%d:%d", &h2, &m2);
   ll temp=abs(h1-h2)*(60)+abs(m1-m2);
   temp/=2;
   h1=h1+temp/60;
   m1=m1+temp%60;
   if(m1==60)
   {
     m1=0;
     h1+=1;
   }
   printf("%02d:%02d\n",h1,m1);

}

  # include<bits/stdc++.h>
  using namespace std;
  # define ll long long int
  # define ull unsigned long long ll
  # define ld long double
  # define mp make_pair
  # define vi vector<ll>
  # define vii vector<vi>
  # define vl vector<ll>
  # define vll vector<vl>
  # define pii pair<ll,ll>
  # define pll pair<ll,ll>
  # define pb push_back
  # define fi first
  # define se second
  # define mod 1000000007
  # define all(x) (x).begin(),(x).end()
  # define IOS ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  # define MAX 100005
  ll gcd(ll a,ll b){if(b==0)return a;else return gcd(b,a%b);}
  ll expo(ll a,ll b){ll r=1;a=a%mod;while(b){if(b%2)r=(r*a)%mod;a=(a*a)%mod;b=b/2;}
  return r;}
  ll isPrime(ll n){for(ll i=2;i<=sqrt(n);i++){if(n%i==0)return 0;}return 1;}

int main(){
  IOS;
  string s,s1;
  cin>>s>>s1;
  int h1,h2,m1,m2;
  h1 = (s[0]-'0')*10 + (s[1]-'0');
  h2  = (s1[0]-'0')*10 + (s1[1]-'0');
  m1 = (s[3]-'0')*10 + (s[4]-'0');
  m2 = (s1[3]-'0')*10 + (s1[4]-'0');
  if(h2==0)
    h2 = 24;
  int total = (h2-h1)*60 + (m2-m1),f=0;
  total/=2;
  m1+=(total);
  h1+=(m1/60);
  m1%=60;
  if(h1<0)
    cout<<0<<h1<<":";
  else
    cout<<h1<<":";
  if(m1<0)
    cout<<0<<m1;
  else
    cout<<m1;
}

#include<bits/stdc++.h>
#define read() freopen("C:\\Users\\Mehedi\\Desktop\\input.txt","r",stdin)
#define write() freopen("C:\\Users\\Mehedi\\Desktop\\output.txt","w",stdout)
#define dbg1(x) cout<< #x<<" = "<<x<<endl;
#define dbg2(x,y) cout<<#x<<" = "<<x<<" , "<<#y<<" = "<<y<<endl;
#define dbg3(x,y,z) cout<<#x<<" = "<<x<<" , "<<#y<<" = "<<y<<" "<<#z <<" = "<<z<<endl;
#define optimizar ios_base::sync_with_stdio(0); cin.tie(0)
#define mx 50005
#define mod  100000007
#define sc1(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d %d",&a,&b)
void File_IO () {
  #ifndef ONLINE_JUDGE
  read();write();
  #endif
}
using namespace std;
typedef long long ll;
int main(){
	#ifndef ONLINE_JUDGE
	read();
	write();
	double t1 = clock();
	#endif
	int a,b;
	char ch;
	cin>>a>>ch>>b;
	int temp1 = a*60 + b;
	int c,d;
	cin>>c>>ch>>d;
	int temp2 = c*60 + d;
	int dif = temp2-temp1;
	if(dif<0)dif+=24*60;

	dif/=2;
	if(a+dif/60 <10 )cout<<"0";
	cout<<a+dif/60<<":";
	if(b+dif%60<10 ) cout<<"0";
	cout<<b+dif%60<<endl;

	#ifndef ONLINE_JUDGE
	double t2 = clock();
	printf("%.10lf\n", (t2-t1));
	#endif
	return 0;
}

#include <bits/stdc++.h>
#define ROCK ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
typedef long long ll;
ll toll(std::string str)
{
    ll num;
    std::stringstream ss(str);
    ss >> num;
    return num;
}
int main()
{
    ROCK;
    string s1,s2;
    cin>>s1>>s2;
    ll h1,m1,h2,m2;
    string s3,s4,s5,s6;
    s3=s3+s1[0]+s1[1];
    s4=s4+s1[3]+s1[4];
    s5=s5+s2[0]+s2[1];
    s6=s6+s2[3]+s2[4];
    h1=toll(s3);
    m1=toll(s4);
    h2=toll(s5);
    m2=toll(s6);
    ll h3=(h1+h2)/2;
    ll m3=0;
    if(m1==0 && m2==0)m3=30;
    else m3=(m1+m2)/2;
    if((h1+h2)%2!=0 && (m1!=0 || m2!=0))m3=m3+30;
    if(m3>59){
        m3=60-59;
        h3++;
    }
    if(h3<10)cout<<"0"<<h3<<":";
    else cout<<h3<<":";
    if(m3<10)cout<<"0"<<m3<<endl;
    else cout<<m3<<endl;
    return 0;
}

# include <bits/stdc++.h>
using namespace std;

int a1,b1,a2,b2;
int main()
{
  scanf("%d%*c%d",&a1,&a2);
  scanf("%d%*c%d",&b1,&b2);
  int t = (b1 - a1) * 60 + b2 - a2;
  t /= 2;
  int ans1 = t / 60 + a1;
  t %= 60;
  int ans2 = t + a2;
  while(ans2 > 60) ans2 -= 60,ans1++;
  if(ans1 / 10 == 0) printf("0");
  printf("%d:",ans1);
  if(ans2 / 10 == 0) printf("0");
  printf("%d\n",ans2);
  return 0;
}

#include <bits/stdc++.h>
#define F first
#define S second
#define ll long long
#define FOR(i,n) for(int i = 0; i < n; i++)
#define stream fin fout
#define fin ifstream cin("input.txt");
#define fout ofstream cout("output.txt");
#define vi vector<int>
#define mp(a,b) make_pair(a, b)
#define pii pair<int, int>

const long long INF = (long long)(10e9);

using namespace std;

int main()
{
    string a, b;
    cin >> a >> b;
    int h1 = atoi(a.substr(0, 2).c_str());
    int m1 = atoi(a.substr(3, 5).c_str());
    int h2 = atoi(b.substr(0, 2).c_str());
    int m2 = atoi(b.substr(3, 5).c_str());
    m1 += h1*60;
    m2 += h2*60;
    int m3 = m1 + m2;
    m3/=2;
    int h3 = m3/60;
    m3%=60;
    if(h3 < 10)cout << 0;
    cout << h1 << ':';
    if(m3 < 10)cout << 0;
    cout << m3;
    return 0;
}

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define pb push_back
#define sz(x) (int)(x).size()

int main () {

  ios_base::sync_with_stdio(false);
  cin.tie(nullptr); cout.tie(nullptr);

  string str, end; cin >> str >> end;
  int i = stoi(str.substr(0, 2));
  int j = stoi(end.substr(0, 2));
  int k = stoi(str.substr(3, 2));
  int l = stoi(end.substr(3, 2));

  int diff1 = abs(i - j), diff2 = abs(k - l);
  int total = 60 * diff1 + diff2; total /= 2;
  int add1 = (total)/60; total %= 60;
  add1 += (total + k)/60;
  int add2 = (k+total)%60;
  cout << add2 << '\n';
  string ans = (i + add1 < 10 ? "0": "");
  ans += to_string(i + add1);
  ans += ':';
  ans += (add2 < 10 ? "0": "");
  ans += to_string(add2);

  cout << ans << '\n';

  return 0;
}

#include<iostream>
using namespace std;

int main(){
    int a,b,a1,b1;
    char str,str1;
    int ans1,ans;
    while(cin>>a>>str>>b){
        cin>>a1>>str1>>b1;
        if((a+a1)%2==0){
            ans=(a+a1)/2;
            ans1=(b+b1)/2;
            if(ans<10){cout<<"0";}
            cout<<ans<<":";
            if(ans1<10){cout<<"0";}
            cout<<ans1<<endl;
        }else{
            double ans=(double)(a+a1)/2.0;
            ans*=10;
            int ans4=(int)ans%10;

            ans1=(a+a1)/2;
            //cout<<ans1<<endl;
            int ans3=(b+b1)/2+ans4*6;
            if(ans<10){cout<<"0";}
            cout<<ans1<<":";
            if(ans1<10){cout<<"0";}
            cout<<ans3<<endl;
        }

    }

return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int,int>
#define pb push_back
#define F first
#define S second
#define mod 1000000007
#define maxn 100005
#define inf 1e18
#define boost ios::sync_with_stdio(false);cin.tie(0)
#define fr freopen("source.txt","r",stdin),freopen("output.txt","w",stdout)
#define SET(a,b) memset(a,b,sizeof(a))
int main()
{
    string s1,s2;
    cin>>s1>>s2;
    ll h1,h2,m1,m2;
    ll a,b;
    h1=(s1[0]-'0')*10+(s1[1]-'0');
    h2=(s2[0]-'0')*10+(s2[1]-'0');
    m1=(s1[3]-'0')*10+(s1[4]-'0');
    m2=(s2[3]-'0')*10+(s2[4]-'0');
    a=h2-h1;
    b=m2-m1;
    if(a+b==0){
        cout<<"12:00";
        return 0;
    }
    if(a<0) a+=24;
    if(b<0) b+=60;
    a=a*60;
    a=(a+b)/2;
    b=a%60;
    a=a/60;
    a=h1+a;
    b=m1+b;
    if(b>=60){
        a=a+(b/60);
        b=b%60;
    }
    if((a)/10>=1)
    cout<<a;
    else cout<<0<<a;
    cout<<":";
    if((b)/10>=1)
    cout<<b;
    else cout<<0<<b;
}

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll gcd(ll a,ll b)
{
	if(b==0)
	{
		return a;
	}
	return gcd(b,a%b);
}
int main()
{
	int h1,m1,h2,m2;
	char x,y;
	cin>>h1>>x>>m1>>h2>>y>>m2;
//	cout<<h1<<" "<<m1<<" "<<h2<<" "<<m2<<endl;
  int minutes = (h2-h1) * 60 + (m2 - m1 );
 //cout<<minutes<<endl;
  minutes=minutes/2;
  int h=minutes/60;
	int ma=( minutes % 60);
	if(m1+ma==60){
		cout << setfill('0') << setw(2) << (h1+h+1);
	 cout<<":"<<(00);
	 return 0;
	}

	cout << setfill('0') << setw(2) << (h1+h);
	cout<<":";
	cout << setfill('0') << setw(2) << (m1+ma) ;
}

#include<iostream>
using namespace std;
int main(){
	long long int h1,m1,h2,m2,min,m,h;
	scanf("%d:%d",&h1,&m1);
	scanf("%d:%d",&h2,&m2);
	min=(h2+h1)*60+m2+m1;
	min/=2;
	m=min%60;
	h=min/60;
	printf("%02d:%02d\n",h,m);
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a,b,c,d;
    scanf("%d:%d",&a,&b);
    scanf("%d:%d",&c,&d);
    int e=a*60+b,g=c*60+d;
    int f=(e+g)>>1;
    cout<<f/60<<":"<<f%60<<endl;
	return 0;
}

/*
MMMMMMMMMMMMMMMMMMMMM.                             MMMMMMMMMMMMMMMMMMMMM
  `MMMMMMMMMMMMMMMMMMM           M\  /M           MMMMMMMMMMMMMMMMMMM'
    `MMMMMMMMMMMMMMMMMM          MMMMMM          MMMMMMMMMMMMMMMMMM'
      MMMMMMMMMMMMMMMMMM-_______MMMMMMMM_______-MMMMMMMMMMMMMMMMMM
       MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
        MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
       MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
     .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.
    MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
                   `MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM'
                          `MMMMMMMMMMMMMMMMMM'
                              `MMMMMMMMMM'
                                 MMMMMM
                                  MMMM
                                   MM                                       */
  #include<bits/stdc++.h>
  #include<ext/pb_ds/assoc_container.hpp>
  #include<ext/pb_ds/tree_policy.hpp>
  using namespace std;
  using namespace __gnu_pbds;
  typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> PBDS;
  #pragma comment(linker, "/STACK:16777216")
  #define M1 1000000007
  #define M2 998244353
  #define fio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  #define ll long long int
  #define ull unsigned long long int
  #define eb emplace_back
  #define mkp make_pair
  #define setbits(x)          __builtin_popcount(x)
  #define zrobits(x)          __builtin_ctzll(x)
  #define lftbit(x)           x ? 64 - __builtin_clzll(x) : -inf;
  #define test(t) while(t--)
  #define PI  acos(-1.0)
  #define F first
  #define S second
  #define coutd(x) cout << fixed << setprecision(x)
  #define all(v) v.begin(),v.end()
  #define rall(v) v.rbegin(),v.rend()
  #define NL cout<<'\n';
  #define endl '\n'
  #define sz(x)       (int)x.size()
  #define clr(x) memset(x, 0, sizeof(x))
  #define deb(x) cout << #x << "=" << x << endl;
  #define deb2(x, y) cout << #x << "=" << x << "," << #y << "=" << y << endl;
  #define deb3(x, y, z) cout << #x << "=" << x << "," << #y << "=" << y << ","<<#z<<"="<<z<<endl;
  #define loop(a,b) for(int i=a;i<b;i++)
  #define loope(a,b) for(int i=a;i<=b;i++)
  #define pv(v) for(auto i:v) cout<<i<<" "; cout<<endl;
  #define pv1(v) for(int i=1;i<sz(v);i++) cout<<v[i]<<" "; cout<<endl;
  #define read(v) for(int i=0;i<sz(v);i++) cin>>v[i];
  #define read1(v) for(int i=1;i<sz(v);i++) cin>>v[i];
  typedef pair<int, int>  pii;
  typedef pair<ll, ll>    pl;
  typedef vector<int>     vi;
  typedef vector<ll>      vl;
  typedef vector<pii>     vpii;
  typedef vector<pl>      vpl;
  typedef vector<vi>      vvi;
  typedef vector<vl>      vvl;
  const int64_t INF = 1e9;
  mt19937_64 rang(chrono::high_resolution_clock::now().time_since_epoch().count());
  void printTime(clock_t begin)
  {
      printf("%.3lf seconds\n", (double) (clock() - begin) / CLOCKS_PER_SEC);

  }
  ll toint(const string &s) {stringstream ss; ss << s; ll x; ss >> x; return x;}

  string tostring ( ll number ){stringstream ss; ss<< number; return ss.str();}

  template<typename T>
  T toIntegralType(const string &str) {
      static_assert(is_integral<T>::value, "Integral type required.");
      T ret;
      stringstream ss(str);
      ss >> ret;
      if ( to_string(ret) != str)
          throw invalid_argument("Can't convert " + str);
      return ret;
  }
  bool is_prime(int n)
  {
      if(n<2) return 0;
      for(int i=2;i*i<=n;i++) if(n%i==0)  return 0;
      return 1;
  }
  bool sortbysec(const pair<string,int> &a,
                const pair<string,int> &b)
  {
      return (a.second > b.second);
  }
  ll fast_power(ll a,ll x)
  {
      if(x==0) return 1;
      else if(x==1) return a;
      else { ll R = fast_power(a,x>>1);
      if(!(x&1)) return R*R;
      else return R*a*R; }
  }
  ll nc2(ll n){ return n*(n-1)/2ll; }

void solve()
{
    string s1,s2; cin>>s1>>s2;
    int h1=toint(s1.substr(0,2)) , m1=toint(s1.substr(3,2));
    int h2=toint(s2.substr(0,2)) , m2=toint(s2.substr(3,2));
    if(h2==0) h2=24;
    int mins=(abs(h2-h1)-1)*60+(60-m1)+m2; //deb(mins)
    mins/=2;
    int hx=mins/60;
    int mx=mins%60;
    //deb2(hx,mx)
    if(h1+hx+(m1+mx)/60 >9)
      {
          if(h1+hx+(m1+mx)/60 <24)
           cout<<h1+hx+(m1+mx)/60;
          else if((h1+hx+(m1+mx)/60)-24 >9)
            cout<<(h1+hx+(m1+mx)/60)-24;
          else cout<<0<<(h1+hx+(m1+mx)/60)-24;
      }
    else cout<<0<<h1+hx+(m1+mx)/60;
    cout<<":";
    if((m1+mx)%60 >9)cout<<(m1+mx)%60;
    else cout<<0<<(m1+mx)%60;

}
  int32_t main()
  {
     fio;
     // #ifndef ONLINE_JUDGE
     // freopen("input.txt","r",stdin);
     // freopen("output.txt","w",sdout);
     srand(chrono::high_resolution_clock::now().time_since_epoch().count());
    // clock_t begin = clock();
     int t=1;
     //cin>>t;
     test(t)
     {
          solve(); NL
          //printTime(begin);
     }
  }

#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <string>
#include <set>
#define forn(i,n) for (int i = 0; i < n; i++)
#define ford(i,n) for(int i = n-1; i >= 0; i--)
#define fore(i,l,r) for (int i = l; i < r; i++)
#define F first
#define S second
#define PB push_back
#define MP make_pair
typedef long long ll;
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int h1, m1, h2, m2, h3 = 0, m3 = 0;
	scanf_s("%d:%d", &h1, &m1);
	scanf_s("%d:%d", &h2, &m2);
	forn(i, 23){
		forn(j, 60){
			if ((i > h1 || (i == h1 && j > m1)) && (i < h2 || (i == h2 && j <= m2)))
				if (m3 == 59){
					h3++;
					m3 = 0;
				}
				else
					m3++;
		}
	}
	m3 += h3 * 60;
	m3 /= 2;
	forn(j, m3){
			if (m1 == 59){
			h1++;
			m1 = 0;
			}
			else
				m1++;
	}
	cout << h1/10 << h1%10 << ":" << m1/10 << m1%10;
}

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <cstring>
#include <vector>
#include <map>
#include <iterator>
#include <cstdlib>
#include <set>
#include <utility>

using namespace std;

//vector<long long int>mas;

typedef long long int ll;
typedef unsigned long long int ulli;
typedef vector<long long int> vll;
typedef vector<int> vi;
typedef vector<long long int> vl;
typedef vector<string> vs;
typedef vector<char> vc;
typedef vector<vector<int>> vvi;
typedef vector<vector<long long int>> vvll;
typedef map<int, int> mpi;
typedef vector<vector<char>> vvc;
typedef multimap<int, int > mmpi;
typedef set<int> sti;
typedef multiset<int> msti;

int main()
{
#ifdef _DEBUG
	freopen("input.in", "r", stdin);
	freopen("output.in", "w", stdout);
#else
	//freopen("ladder.in", "r", stdin);
	//freopen("ladder.out", "w", stdout);
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#endif
	int x, y;
	char c;
	cin >> x >>c>> y;
	int mal = x,maly=y;
	int sum = -(x * 60 + y);
	cin >> x >> c >> y;
	sum+= x * 60 + y;
	sum /= 2;
	int t = sum / 60;
	if ((maly+sum) / 60 == 0)
		if ((maly + sum) / 10 == 0)
		if (mal/10==0 )
			cout << "0"<<mal << ':' << "0"<<maly+sum;
		else
			cout << mal << ':' << "0" << maly + sum;
		else
		if (mal / 10 == 0)
			cout <<'0' <<mal << ':' << maly+  sum;
		else
			cout << mal << ':' << maly + sum;
	else
	if ((maly + sum)%60/10==0)
	if (mal / 10 == 0 && mal + (maly + sum) % 60 != 0)
		cout << "0"<<mal + (maly + sum) / 60 << ':' << "0" << (maly + sum) % 60;
	else
		cout <<  mal + (maly + sum) / 60 << ':' << "0" << (maly + sum) % 60;
	else
	if (mal / 10 == 0 && mal + (maly + sum) % 60 != 0)
		cout <<'0' <<mal + (maly + sum) / 60 << ':' << (maly + sum) % 60;
	else
		cout << mal + (maly + sum) / 60 << ':' << (maly + sum) % 60;
	return 0;
}

#include<iostream>

using namespace std;
int main()
{
	int a, b, c, d, s1,s2, hour1, minute1, hour2, minute2, hour3, minute3 ;
	cin >> hour1;
	a = hour1;
	cin >> minute1;
	b = minute1;
	cin >> hour2;
	c = hour2;
	cin >> minute2;
	d = minute2;
	s1 = b + d;
	if ( s1 >= 60 )
	{
		c += 1;
		minute3 = (s1 - 60) / 2;
	}
	if ( s1 < 60 )
	{
		minute3 = s1 / 2;
	}
	s2 = a + c;
	if ( s2 % 2 == 1 )
	{
		minute3 += 30;
		hour3 = s2 / 2;
	}
	if ( s2 % 2 == 0 )
	{
		hour3 = s2 / 2;
	}
	cout << hour3 << ":" << minute3<<endl;
}

#ifndef LOCAL
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
#endif //LOCAL

#define _SCL_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS

//#define push_back pb
#define first x
#define second y

#include <cassert>
#include <ciso646>
#include <climits>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <array>
#include <bitset>
#include <deque>
#include <forward_list>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <algorithm>
#include <complex>
#include <functional>
#include <initializer_list>
#include <iterator>
#include <limits>
#include <locale>
#include <numeric>
#include <regex>
#include <string>
#include <utility>
#include <fstream>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <random>
#include <memory>

#ifdef LOCAL
//#include <vld.h>
#endif //LOCAL
using namespace std;

//typedef __int128_t ll;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;
typedef long double ld;

#define speedup cout.tie(nullptr);cin.tie(nullptr);ios_base::sync_with_stdio(false)
#define coutdouble cout<<setprecision(20);cout<<fixed

#define all(v) (v).begin(),(v).end()
#define sz(v) (int)(v).size()

/*------CommentInInteractive--------*/
#ifndef LOCAL
#define endl '\n'
#endif //LOCAL
/*----------------------------------*/
const int INF = 1000 * 1000 * 1000 + 322;
const ll LLINF = 2LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL + 57;
const int MOD = 1000 * 1000 * 1000 + 7;
const ll FFT_MOD = 998244353;
const int P1M = 1336337; //Large prime ( ~1M )
const int P1K = 1009; //Big prime ( ~1K )
const ld PI = acos(-1.);//3.1415926535897932384626433832795
const ld EPS = 1e-7;
/*------------------------------------------------IO_OPERATORS---------------------------------------------*/
template<typename T, typename U> inline ostream &operator << (ostream &_out, const pair<T, U> &_p) { _out << _p.first << " " << _p.second; return _out; }
template<typename T, typename U> inline istream &operator >> (istream &_in, pair<T, U> &_p) { _in >> _p.first >> _p.second; return _in; }
template<typename T> inline ostream &operator << (ostream &_out, const vector<T> &_v) { if (_v.empty()) return _out; _out << _v.front(); for (auto _it = ++_v.begin(); _it != _v.end(); ++_it) _out << ' ' << *_it; return _out; }
template<typename T> inline istream &operator >> (istream &_in, vector<T> &_v) { for (auto &_i : _v) _in >> _i; return _in; }
template<typename T> inline ostream &operator << (ostream &_out, const set<T> &_s) { if (_s.empty()) return _out; _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out << ' ' << *_it; return _out; }
template<typename T> inline ostream &operator << (ostream &_out, const multiset<T> &_s) { if (_s.empty()) return _out; _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out << ' ' << *_it; return _out; }
template<typename T> inline ostream &operator << (ostream &_out, const unordered_set<T> &_s) { if (_s.empty()) return _out; _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out << ' ' << *_it; return _out; }
template<typename T> inline ostream &operator << (ostream &_out, const unordered_multiset<T> &_s) { if (_s.empty()) return _out; _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out << ' ' << *_it; return _out; }
template<typename T, typename U> inline ostream &operator << (ostream &_out, const map<T, U> &_m) { if (_m.empty()) return _out; _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) _out << ", (" << _it->first << ": " << _it->second << ')'; return _out; }
template<typename T, typename U> inline ostream &operator << (ostream &_out, const unordered_map<T, U> &_m) { if (_m.empty()) return _out; _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) _out << ", (" << _it->first << ": " << _it->second << ')'; return _out; }
/*--------------------------------------------------IO_FILES-----------------------------------------------*/
const char * infile =
#ifdef LOCAL
"input.txt"
#else
""
#endif //LOCAL
;
const char * outfile =
#ifdef LOCAL
""
#else
""
#endif //LOCAL
;

/*-------------------------------------------------ALLOCATOR----------------------------------------------*/
//#define ALLOC_LOCAL
#ifdef ALLOC_LOCAL
const int ML_ = 200;
char mem_[ML_ * 1024 * 1024];
size_t _ptr = 0, _magic = 21323400;
void * operator new(size_t cnt) { if (_ptr + cnt < sizeof mem_) { _ptr += cnt; return  mem_ + _ptr - cnt; } else { assert(false);  _ptr = cnt + _magic; return mem_ + _magic; } }
void operator delete(void *) {}
#endif //ALLOC_LOCAL
/*-----------------------------------------------------MATH------------------------------------------------*/
inline ll gcd(ll a, ll b) { while (b) { a %= b; swap(a, b); } return a; }
inline ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
inline int pwm(ll xx, ll pow, int MD = MOD) { if (pow < 0) { return pwm(pwm(xx, MD - 2, MD), -pow, MD); } ll mlt = 1; while (pow) { if (pow & 1) { mlt *= xx; mlt %= MD; } xx *= xx; pow >>= 1; xx %= MD; } return (int)mlt; }
//inline ll gcdexm(ll a, ll b, ll &x, ll &y, ll p) { if (b == 0) { x = 1; y = 0; return a; }ll xx, yy; ll gc = gcdexm(b, a % b, yy, xx, p); x = xx; y = ((yy - (a / b) * xx) % p + p) % p; return gc; } //returns x = inv(a) mod p, p being not prime. returns gcd(x, p)
//inline ll gcdex(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return a; }ll xx, yy; ll gc = gcdex(b, a % b, yy, xx); x = xx; y = yy - (a / b) * xx; return gc; }
inline int inv(ll r, int _mod = MOD) { return pwm(r % _mod, _mod - 2, _mod); }
/*-----------------------------------------------------CODE------------------------------------------------*/

inline void solve() {
	int h1, m1, h2, m2;
	char _;
	cin >> h1 >> _ >> m1 >> h2 >> _ >> m2;

	int kek = (60 * h1 + m1 + 60 * h2 + m2) / 2;

	cout << kek / 60 << ":" << kek % 60 << endl;
}

int main() {

	if (*infile != '\0')
		(void)freopen(infile, "r", stdin);
	if (*outfile != '\0')
		(void)freopen(outfile, "w", stdout);

	speedup;
	coutdouble;

	//int tst = 100;
	//srand(time(NULL));
	//cin >> tst;
	//scanf("%d", &tst);
	//while (tst-- > 0) {
	//while(true) {
	solve();
	//if ((tst & 0xF) == 0) {
	//cerr << "ok\n";
	//}
	//cerr << "/*-----------------*/\n";
	//}

#ifdef LOCAL
	cerr << "Time: " << (ld)clock() / CLOCKS_PER_SEC << endl;
	while (true);
#endif // LOCAL

	return 0;
}

#pragma comment(linker, "/STACK:10000000000")
#define forn(from, to, i) for (int i = from; i < to; ++i)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <cstdlib>
#include <stdint.h>
#include <cstdint>
#include <math.h>
#include <cmath>
#include <string>
#include <string.h>
#include <cstring>
#include <vector>
#include <stack>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <queue>
#include <bitset>
#include <random>
#include <time.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
#define m_p make_pair
#define all(x) x.begin(), x.end()
#define pii pair <int, int>
#define pll pair <ll, ll>
#define pb push_back
#define ff first
#define ss second
const int INF = 1000000007;
const ll INF2 = 1000000000000000007;
const ll MOD = 1000000007;
const ll MOD1 = 1864463441;
const int SIZE = 200010;
const db eps = 1e-9;
const ldb pi = acos(-1.0);
ll n, m, k, x, y, z, v, v1,sum, med, a, b, cnt, c, rs, ind, ind1, q, l, r, d, sz, mx, mi, bf, bf1;
ll ar[SIZE], kekw[SIZE],pref[SIZE];
bool fl, fl1, lose, used[1010][1010];
string s, t, strr[1010];
vector<pair<pii, int> > ans;
bool cmp(int a, int b) {
	return a > b;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifdef _DEBUG
	freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
	double cl = clock();
	cin >> s >> t;
	l = stoi(s.substr(0, 2))*60 + stoi(s.substr(3,2));
	r = stoi(t.substr(0, 2)) * 60 + stoi(t.substr(3, 2));
	x = ((l + r) / 2) / 60; y = ((l + r) / 2) % 60;
	if (x < 10) cout << 0;
	else cout << x / 10;
	cout << x % 10 << ':';
	if (y < 10) cout << 0;
	else cout << y / 10;
	cout << y % 10;
#endif
#ifdef _DEBUG
	cout << "\n\n" << (clock() - cl) / CLOCKS_PER_SEC << " s.\n";
#endif
	return 0;
}

/*
		copyright
	# all rights reserved #
	#######################
*/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <utility>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
#include <math.h>
#include <stack>
#include <set>
#include <map>
#include <iterator>

using namespace std;

int main() {
	//freopen("input.txt", "r", stdin);
	int h1, m1, h2, m2;
	char c;
	cin >> h1 >> c >> m1;
	cin >> h2 >> c >> m2;
	int dif = h2 - h1;
	int dif2 = m2 - m1;
	if (dif == 1) {
		m1 += 30;
	}
	else
		h1 += dif/2;
	m1 += dif2/2;
	if (h1 < 10)
		cout << 0;
	cout << h1 <<":";
	if (m1 < 10)
		cout << 0;
	cout << m1;
	return 0;
}

#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <list>
#include <string>
using namespace std;

int main()
{
	int h1, h2, m1, m2;
	char buf;
	cin >> h1 >> buf >> m1;
	cin >> h2 >> buf >> m2;
	int h, m;
	h = h2 - h1;
	m = m2 - m1;
	if (h % 2 != 0)
	{
		m += 60;
		h -= 1;
	}
	h /= 2;
	m /= 2;

	h += h1;
	m += m1;

	if (h < 10)
		cout << "0";
	cout << h << ":";
	if (m < 10)
		cout << "0";
	cout << m;
	return 0;
}

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

bool inRange(int h, int m)
{
	if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && (m % 2 == 0))
		return true;
	return false;
}

int main()
{
	string start, end, temp;
	cin >> start;
	cin >> end;

	temp = start.substr(0, 2);
	int h1 = stoi(temp);
	temp = start.substr(3, 2);
	int m1 = stoi(temp);
	if (!inRange(h1, m1))
		return 0;
	float sTime = h1 + (m1 / 60.0);

	temp = end.substr(0, 2);
	int h2 = stoi(temp);
	temp = end.substr(3, 2);
	int m2 = stoi(temp);
	if (!inRange(h2, m2))
		return 0;
	float eTime = h2 + (m2 / 60.0);

	if ((eTime - sTime) < 0.0333)
		return 0;

	float midTime = (sTime + eTime) / 2.0;
	int h3 = (int)midTime;
	int m3 = (midTime - (int)midTime) * 60;

	cout << setw(2) << setfill('0') << h3;
	cout << ":";
	cout << setw(2) << setfill('0') << m3;

	return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main()
{
      int h1,m1,h2,m2;
      char ch;
      cin>>h1>>ch>>m1;
      cin>>h2>>ch>>m2;
      int min_diff;
      float hr_diff;
      if(h2==00)
      {
          min_diff=(m2-m1)/2;
           hr_diff=(float(24)-float(h1))/float(2);
      }
      else
      {
          min_diff=(m2-m1)/2;
          hr_diff=(float(h2)-float(h1))/float(2);
      }
      float gg=hr_diff-floor(hr_diff);
      int resh,resm;
      if(gg>0)
      {
          int no_min=gg*60;
          resm=m1+no_min+min_diff;
          resh=floor(hr_diff)+h1;
      }
      else
      {
          resm=m1+min_diff;
          resh=floor(hr_diff)+h1;
      }
      if(resm>=60)
      {
          resm=resm-60;
          resh+=1;
      }
      if(resh>=24)
      {
          resh=resh-24;
      }
      if(resh<10 && resm<10)
      {
      cout<<"0"<<resh<<":"<<"0"<<resm<<"\n";
      }
      else if(resh<10 && resm>10)
      {
      cout<<"0"<<resh<<":"<<resm<<"\n";
      }
      else if(resh>10 && resm<10)
      {
      cout<<resh<<":"<<"0"<<resm<<"\n";
      }
      else
      {
      cout<<resh<<":"<<resm<<"\n";
      }
}

#include <bits/stdc++.h>
#define F first
#define S second
#define ll long long
#define FOR(i,n) for(int i = 0; i < n; i++)
#define stream fin fout
#define fin ifstream cin("input.txt");
#define fout ofstream cout("output.txt");
#define vi vector<int>
#define mp(a,b) make_pair(a, b)
#define pii pair<int, int>

const long long INF = (long long)(10e9);

using namespace std;

int main()
{
    string a, b;
    cin >> a >> b;
    int h1 = atoi(a.substr(0, 2).c_str());
    int m1 = atoi(a.substr(3, 5).c_str());
//    cout << h1 << ':' << m1 << '\n';
    int h2 = atoi(b.substr(0, 2).c_str());
    int m2 = atoi(b.substr(3, 5).c_str());

    if((h2 - h1)%2 == 0){
        if((h2+h1/2) < 10)cout << 0;
        cout << (h2+h1)/2 << ':';
        if((m1 + m2)/2 < 10)cout << 0;
        cout << (m1+m2)/2;
    }else{
        if((h2+h1/2) < 10)cout << 0;
        cout << (h2+h1)/2 << ':';
        if((m2 + 60 - m1)/2 < 10)cout << 0;
        cout << (m2 + 60 - m1)/2;
    }
    return 0;
}

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main(void)
{
	string start,finish;
	cin >> start;
	cin >> finish;
	int sh,fh ;
	int sm ,fm;
	int hours = 0;
	int min = 0;

	sh = stoi(start.substr(0,2));
	sm = stoi(start.substr(3,2));

	fh = stoi(finish.substr(0,2));
	fm = stoi(finish.substr(3,2));

	min = fm-sm;
	hours = fh-sh;
	min = min / 2.0 +  sm + (float (hours) /2)*60;
	hours = hours / 2.0 + sh + hours/2;

	cout << setfill ('0') << setw (2)<<hours<<":";

	cout << setfill ('0') << setw (2)<<min;

	return 0;

}

#include <bits/stdc++.h>
using namespace std;
int time(int y,int r){
	return y*60+r;
}
int main(){
	int a1,a2,b1,b2;
	scanf("&d:&d",a1,a2);
	scanf("&d:&d",b1,b2);
	int fuck=time(b1,b2)-time(a1,a2);
	int bitch=fuck/2;
	int hour=bitch/60;
	int min=bitch%60;
	cout<<hour<<':'<<min<<endl;
	return 0;
}

#include<iostream>
using namespace std;
int main(){
	int a,b,c,d,avali,dovomi,sevomi,sevom;
	char yek,two;
	cin>>a>>yek>>b;
	cin>>c>>two>>d;
	if(a==c){
		 avali=(b+d)/2;
		if(a<10){
			cout<<0<<a<<":";
		}else{
			cout<<a<<":";
		}
		if(avali<10){
			cout<<0<<avali;
		}else{
			cout<<avali;
		}
	}else if(c-a==1){
		if(a<10){
			cout<<0<<a<<":";
		}else cout<<a<<":";
		if(b==0 and d==0){
			cout<<30;
		}else{
		 dovomi=(b+d)/2;
		if(dovomi<10){
			cout<<0<<dovomi;
		}else cout<<dovomi;
	}
	}else{
		sevomi=(a+c)/2;
		if(sevomi<10){
			cout<<0<<sevomi<<":";
		}else cout<<sevomi<<":";
		if(b==0 and d==0){
			cout<<00;
		}else if((b==0 and d==58) or (b==58 and d==0)){
			cout<<59;
			}else{
		sevom=(b+d)/2;
		if(sevom<10){
			cout<<0<<sevom;
		}else cout<<sevom;
	}
	}
}

#include <bits/stdc++.h>
#define F first
#define S second
#define cont continue
#define all(a) a.begin(),a.end()
#define fast_io ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
const ll inf=1e16;
const ll MAXN=1e7;
const double pi=acos(-1);

ll h,m,mm,hh;
char l;
int main()
{
//    freopen("","r",stdin);
//    freopen("","w",stdout);

    fast_io

    cin>>h>>l>>m;
    cin>>hh>>l>>mm;
    if((h+hh)/2<10)cout<<0;
    cout<<(h+hh)/2<<":";
    if(m==mm and mm==0)cout<<30<<endl;
    else{
    if((m+mm)/2<10)cout<<0;
    cout<<(m+mm)/2<<endl;
}
    return 0;
}

#include<iostream>
using namespace std;
int main()
{
	int hh;
	int mm;
	int hh_2;
	int mm_2;
	char temp;
	cin>>hh>>temp>>
	mm>>hh_2>>temp>>mm_2;

	int min_1=(hh*60)+mm;
	int min_2=(hh_2*60)+mm_2;
	int min=(min_2-min_1)/2;
	hh+=min/60;

	mm=min%60;

	   		if (hh<=9)
	   		{
	   			cout<<0<<hh<<temp<<mm<<endl;
	   		}
	   		else if (mm<=9&&hh<=9)
	   		{
	   	 cout<<0<<hh<<temp<<0<<mm<<endl;
	   		}
	   		else if (mm<=9)
	   		{
	   		cout<<hh<<temp<<0<<hh<<endl;
	   		}
	   		else
	   		{
	   		cout<<hh<<temp<<mm<<endl;
	   		}

	   }

#include<bits/stdc++.h>
#define IOS             ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define pb              push_back
#define mkp             make_pair
#define all(a)          a.begin(), a.end()
#define rall(a)         a.rbegin(), a.rend()
#define maximum(a)      *max_element(all(a))
#define minimum(a)      *min_element(all(a))
#define MAX             (int)1e5+7
using namespace std;
typedef long long LL;
typedef pair<int, int> pi;
typedef pair<LL, LL> pill;

int main()
{
    IOS;

    int h1, m1, h2, m2, h, m;
    char ch;

    cin>>h1>>ch>>m1;
    cin>>h2>>ch>>m2;

    if(h1==h2){
        h = h1;
        m = (m2-m1)/2;
        m+=m1;
    }
    else{
        h = (h1+h2)/2;
        if((h1+h2)%2==0 && m1==m2) m=m1;
        else{
            m = (60-m1)+m2;
            m/=2;
            m+=m1;
            if(m>=60){ m-=60; h++; }
        }
    }

    cout << setfill('0') << setw(2) << h<<":"<<setfill('0') << setw(2) <<m<<endl;

    return 0;

}

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//#include <boost/multiprecision/cpp_int.hpp>
//
//using namespace boost::multiprecision;
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

/*** Typedef ***/
typedef long long ll;
//typedef long long lli;
typedef long long int lli;
typedef unsigned long long ull;
typedef    long double   ld;

//typedef    unordered_set<ll>   usll;
//typedef    unordered_multiset<ll>   umsll;

/*** Loops ***/
#define ffit(i, dat)    for (__typeof(dat.begin()) i = dat.begin(); i != dat.end(); ++i)
#define ff1(i,a,b) for(ll i = a; i < b; i++)
#define ff2(i,a,b) for(ll i = b-1; i >= a; i--)
#define ff3(i,a,b,m) for(ll i = a; i <b; i+=m)
#define ipar(ar,n) ll ar[n]; ff1(i,0,n) cin>>ar[i];
#define opar(ar,n) ff1(i,0,n) cout<<ar[i]<<" ";
#define foRev(num) for(ll i = num - 1; i >= 0; i--)
#define forIn(arr, num) for(ll i = 0; i < num; i++) sc1(arr[i]);
#define forIn1(arr, num) for(ll i = 1; i <= num; i++) sc1(arr[i]);
#define vpnt(ans) for(ll i = 0; i < ans.size(); i++) cout << ans[i] << (i + 1 < ans.size() ? ' ' : '\n');
#define apnt(arr, num) for(ll i = 0; i < num; i++) cout << arr[i] << (i + 1 < num ? ' ' : '\n');

/*** Define Values ***/

#define PI acos(-1.0)
#define eps 1e-7
#define size1 15

/*** STLs ***/
#define cu continue
#define br break
#define rsz resize
#define ins insert
#define ft front
#define bk back
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define ff first
#define ss second
#define mp make_pair
#define mem(name, value) memset(name, value, sizeof(name))
#define MN3(n1,n2,n3) min(n1,min(n2,n3))
#define MN4(n1,n2,n3,n4) min(n1,min(n2,min(n3,n4)))
#define MX3(n1,n2,n3) max(n1,max(n2,n3))
#define MX4(n1,n2,n3,n4) max(n1,max(n2,max(n3,n4)))
#define mxar(a,n) *max_element(a,a+n)
#define mnar(a,n) *min_element(a,a+n)
#define arr_sm(a,n) accumulate(a,a+n,0)
#define vc_sm(ve,i,j) accumulate(ve.begin()+i,ve.begin()+j+1,0)
#define mx_vc(ve) *max_element(ve.begin(),ve.end())
#define mn_vc(ve) *min_element(ve.begin(),ve.end())
//#define endl " \n"

/*** STLs ***/
typedef vector <ll> vll;
#define vvll vector<vll>
typedef set <ll> sll;
typedef multiset <ll> msll;
//typedef multimap <ll> mpll;
typedef queue <ll> qll;
typedef map <ll, ll> mll;
typedef pair <ll, ll> pll;
typedef vector <pair <ll, ll> > vpll;
typedef priority_queue <pair <ll, ll> > pqpll;
#define ml unordered_map<ll,ll>
///typedef    unordered_multiset<int>   umsi;
typedef    unordered_set<ll>   us;
#define    oncnt    __builtin_popcount
#define    zerobegin   __builtin_clz
#define    zeroend   __builtin_ctz
#define    parity   __builtin_parity

///vector<vector<int>> v(10, vector<int>(20,500)); 2d vector initialization. of 10 rows and 20 columns, with value 500.

/*** Sorts ***/
#define all(v) (v).begin(), (v).end()
#define rev(v) reverse(all(v))
#define srt(v) sort(all(v))
#define srtgrt(v) sort(all(v), greater<ll>())
#define prsrt greater<pair<int,int>>()
/*** Some Prints ***/
#define ip(n) ll n; cin>>n;
#define ip2(n,k) ll n; cin>>n; ll k; cin>>k;
#define kl    '\n'
#define no cout << "NO" << '\n'
#define yes cout << "YES" << '\n'
#define case cout << "Case " << t++ << ": ";
#define ps(x,y)         fixed<<setprecision(y)<<x
#define inf             1e18
#define dbg(x) cout << '>' << #x << ':' << x << endl;
#define w(x)             ll x; cin>>x; while(x--)
bool isPtSquare(long double x)
{
    long double sr = sqrt(x);
    return ((sr - floor(sr)) == 0);
}

ll facts(ll n,ll mod)
{
	ll prod=1;
	for(ll i=1;i<=n;i++)
	{
		prod=(prod*i)%mod;
	}
	return prod;
}

bool isvwl(char ch) {
    if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
         return true;
    else return false;
}
ll mod = 1e9+7;
lli powers(lli b, lli p, lli m = mod){
    lli res = 1;
    while(p > 0){
        if(p & 1){
            res = (res * b) % m;
        }
        b = (b * b) % m;
        p = p>>1;
    }
    return res;
}

lli modInverse(lli n, lli m = mod){
    return powers(n, m - 2, m);
}

vector<ll> factors(ll n){ // returns all factors of a given number
    ll lim = sqrt(n);
    vector<ll> f;
    for(int i = 1; i <= lim; i++){
        if(n % i == 0){
            f.push_back(i);
            f.push_back(n / i);
            if(i*i == n){
                f.pop_back();
            }
        }
    }
    return f;
}

ll ceilAB(ll a, ll b){
    return (a + b - 1) / b;
}
ll bigmod(ll n,ll pow)
{
    if(pow==0)
        return 1;
    if(pow==1)
        return n%mod;

    ll ans=bigmod(n,pow/2);
    ans=(ans*ans)%mod;

    if(pow%2==1)
    {
        ans=(ans*n)%mod;
    }
    return ans%mod;
}
ll binpow(ll a, ll b, ll mod = 2e18){
	ll ans = 1;
	while(b){
		if(b&1) ans*=a;
		a*=a;
		ans%=mod;
		a%=mod;
		b/=2;
	}
	return ans;
}
const int mxn = 1e3;

ll fact[mxn + 1];
void calcfac(ll n, ll mod = 2e18){
	fact[0]  = 1;
	for(int i = 1; i<=n;++i){
		fact[i] = fact[i-1]*i;
		fact[i] %= mod;
	}
}

ll nCr(ll p, ll q, ll mod = 2e18){
	ll val = fact[p];
	ll invfact = fact[q]*fact[p-q];
	val%=mod;
	invfact%=mod;
	val*=binpow(invfact, mod - 2, mod);
	return val%mod;
}

ll nPr(ll p, ll q, ll mod = 2e18){
	ll val = nCr(p, q, mod);
	val*=fact[q];
	val%=mod;
	return val;
}

bool isprime(int n)
{
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    for (int i = 5; i * i <= n; i += 6)
    {
        if ((n % i == 0) || (n % (i + 2) == 0))
            return false;
    }
    return true;
}
ll power(ll x, ll y)
{
    ll temp;
    if(y == 0)
        return 1;
    temp = power(x, y / 2);
    if (y % 2 == 0)
        return temp * temp;
    else
    {
        if(y > 0)
            return (x * temp * temp);
        else
            return ((temp * temp) / x);
    }
}
//#define mod 10000007

//ll pmod(ll a,ll b){ll res=1;a%=mod;assert(b>=0);for(; b; b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
//ll expo(ll x, ll y){ ll res = 1; x = x % mod;  while (y > 0) { if (y & 1)res = (res*x) % mod; y = y>>1;x = (x*x) % mod;}return res;}
//void matmul(ll a[][2], ll b[][2]) { ll tmp[2][2]; for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { tmp[i][j] = 0; for(int k=0; k<2; k++) tmp[i][j] = (tmp[i][j] + a[i][k]*b[k][j]) % mod; }} for(int i=0; i<2; i++) for(int j=0; j<2; j++) a[i][j] = tmp[i][j]; }
//ll fibo(int n)    // returns nth fibonacci number, also S(n) = f(n+2)-1
//{ if(n == 0) return 0; else if(n == 1) return 1; ll T[2][2] = { {0, 1} , {1, 1} }; ll res[2][2] = { {1, 0}, {0,1} }; n--; while(n) { if(n & 1) matmul(res, T); n >>= 1; matmul(T, T); } return res[1][1]; }

#define go(i, a) for (auto i : a)
#define go1(it, v) for(auto it = v.begin(); it != v.end(); ++it)
#define mk(arr,n,type) type *arr=new type[n];
#define sz(obj) (int(obj.size()))
#define ipve(vc,n) vll vc(n); ff1(i,0,n){cin>>vc[i];}
#define ipvc(vc,n) vll vc; ff1(i,0,n){ip(x);vc.pb(x);}
bool sortbysec(const pair<pair<ll,ll>,ll> &a,const pair<pair<ll,ll>,ll> &b)
{
    return (a.second < b.second);
}
bool cmp(pll a,pll b)
{
    return a.ff - a.ss < b.ff - b.ss;
}

//const ll N = 2e5+10;
//const ll N = 10000;
//const ll mod=1e9+7;
//bool ans = all_of(arr, arr + 6, [](int x) {return x & 1; } );
const double pi = 3.141592653589793238460;
ll cbtr(ll n,ll m)
{
    ll sm = 1;
    ff1(i,1,m+1)
    {
        sm*=(n-i+1);
        sm/=i;
    }
    return sm;
}
//string a="cdefghijklmnopqrstuvwxyz";
ld f(ld n)
{
    ld sm = 1;
    ff1(i,1,n+1)
    {
        sm*=i;
    }
    return sm;
}
ld pc(ld n, ld k)
{
    ld sm = f(n)/f(n-k);
    return sm;
}
map< ll, int > prime_factor(ll n) {
  map< ll, int > ret;
  for(ll i = 2; i * i <= n; i++) {
    while(n % i == 0) {
      ret[i]++;
      n /= i;
    }
  }
  if(n != 1) ret[n] = 1;
  return ret;
}
bool p2(ll n)
{
    if(n==0)
        return false;

    return (ceil(log2(n)) == floor(log2(n)));
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 ll h,m,h1,m1; char c,c1;
 cin>>h>>c>>m>>h1>>c1>>m1; ll d;

 if(h>h1){
    d = (24 - abs(h-h1))*60;
    d-=(m-m1);
 }
 else{ d= abs(h-h1)*60;
 d+=abs(m-m1);
 }
 d/=2;
 ll k = d/60;
 ll p = d%60;
 k+=h; p+=m;

 if(p == 60) p = 0,k+=1;

 ll t1 = log10(k)+1;
 ll t = log10(p)+1;
 //cout<<t<<t1<<kl;
 if(k == 0 && t == 1) cout<<"00"<<":"<<0<<p;
 else if(k == 0 && t == 2) cout<<"00"<<":"<<p;
 else if(p == 0 && t1 == 1) cout<<0<<k<<":"<<"00";
 else if(p == 0 && t1 == 2) cout<<k<<":"<<"00";
 else if(t == 1 && t1 == 1) cout<<0<<k<<":"<<0<<p;
 else if(t == 1)
 cout<<k<<":"<<0<<p;

 else if(t1 == 1) cout<<0<<k<<":"<<p;

 else cout<<k<<":"<<p;
  return 0;
}

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int Hour[1],Minute[1],Ha,Ma;
    scanf("%d:%d",&Hour[0],&Minute[0]);
    cout<<endl;
    scanf("%d:%d",&Hour[1],&Minute[1]);
    Ma=Hour[0]*60+Minute[0]+Hour[1]*60+Minute[1];
    Ma/=2;
    Ha=Ma/60;
    if(Ha<10){cout<<"0"<<Ha<<":";if(Ma%60<10)cout<<"0"<<Ma%60;else cout<<Ma%60;}
    else cout<<Ha<<":"<<Ma%60;
}

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    string t1,t2,ans,hr,minu;
    int h,m;
    stringstream ss;
    stringstream ss1;
    cin>>t1;
    cin>>t2;
    int h1=int(t1[0]-48)*10+(int(t1[1]-48));
    int m1=int(t1[3]-48)*10+(int(t1[4]-48));
    int h2=int(t2[0]-48)*10+(int(t2[1]-48));
    int m2=int(t2[3]-48)*10+(int(t2[4]-48));
    int val=(((h2-h1)*60)+(m2-m1))/2;
    if(val>=60){
        h=val/60.0;
        m=val-h*60;
        ss << h;
        hr=ss.str();
        ss1 << m;
        minu=ss1.str();
    }
    else{
        h=h1;
        m=m1+val;
        ss << h;
        hr=ss.str();
        ss1 << m;
        minu=ss1.str();
    }
    if(h<10){
        hr="0"+hr;
    }
    if(m<10){
        minu="0"+minu;
    }
    cout<<hr<<":"<<minu;
    return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    char a;
    int hour1, minute1;
    int hour2, minute2;
    int hour, minute;

    cin >> hour1 >> a >> minute1;
    cin >> hour2 >> a >> minute2;

    int minutes;

    minutes = (hour2 - hour1) * 60 + minute2 - minute1;
    minutes = minutes / 2;

    if(minutes < 60 - minute1){
        hour = hour1;
        minute = minute1 + minutes;
        if(hour < 10 && minute < 10)
            cout << "0" << hour << ":0" << minute;
        else if(minute == 60)
            cout << hour + 1 << ":00";
        else if(hour < 10 && minute >= 10)
            cout << "0" << hour << ":" << minute;
        else if(hour >= 10 && minute < 10)
            cout << hour << ":0" << minute;

        else
            cout << hour << ":" << minute;
    }
    else{
        while(minutes > 60 - minute1){
            minutes = minutes - (60 - minute1);
            minute1 = 0;
            hour1++;
        }
        hour = hour1;
        minute = minute1 + minutes;
        if(hour < 10 && minute < 10)
            cout << "0" << hour << ":0" << minute;
        else if(minute == 60)
            cout << hour + 1 << ":00";
        else if(hour < 10 && minute >= 10)
            cout << "0" << hour << ":" << minute;
        else if(hour >= 10 && minute < 10)
            cout << hour << ":0" << minute;
        else
            cout << hour << ":" << minute;

    }

}

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int Hour[1],Minute[1],Ha,Ma;
    scanf("%d:%d",&Hour[0],&Minute[0]);
    cout<<endl;
    scanf("%d:%d",&Hour[1],&Minute[1]);
    Ma=Hour[0]*60+Minute[0]+Hour[1]*60+Minute[1];
    Ma/=2;
    Ha=Ma/60;
    cout<<Ha<<":"<<Ma%60;
}

#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//#include <boost/multiprecision/cpp_int.hpp>
//
//using namespace boost::multiprecision;
using namespace __gnu_pbds;
using namespace std;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

/*** Typedef ***/
typedef long long ll;
//typedef long long lli;
typedef long long int lli;
typedef unsigned long long ull;
typedef    long double   ld;

//typedef    unordered_set<ll>   usll;
//typedef    unordered_multiset<ll>   umsll;

/*** Loops ***/
#define ffit(i, dat)    for (__typeof(dat.begin()) i = dat.begin(); i != dat.end(); ++i)
#define ff1(i,a,b) for(ll i = a; i < b; i++)
#define ff2(i,a,b) for(ll i = b-1; i >= a; i--)
#define ff3(i,a,b,m) for(ll i = a; i <b; i+=m)
#define ipar(ar,n) ll ar[n]; ff1(i,0,n) cin>>ar[i];
#define opar(ar,n) ff1(i,0,n) cout<<ar[i]<<" ";
#define foRev(num) for(ll i = num - 1; i >= 0; i--)
#define forIn(arr, num) for(ll i = 0; i < num; i++) sc1(arr[i]);
#define forIn1(arr, num) for(ll i = 1; i <= num; i++) sc1(arr[i]);
#define vpnt(ans) for(ll i = 0; i < ans.size(); i++) cout << ans[i] << (i + 1 < ans.size() ? ' ' : '\n');
#define apnt(arr, num) for(ll i = 0; i < num; i++) cout << arr[i] << (i + 1 < num ? ' ' : '\n');

/*** Define Values ***/

#define PI acos(-1.0)
#define eps 1e-7
#define size1 15

/*** STLs ***/
#define cu continue
#define br break
#define rsz resize
#define ins insert
#define ft front
#define bk back
#define eb emplace_back
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define ff first
#define ss second
#define mp make_pair
#define mem(name, value) memset(name, value, sizeof(name))
#define MN3(n1,n2,n3) min(n1,min(n2,n3))
#define MN4(n1,n2,n3,n4) min(n1,min(n2,min(n3,n4)))
#define MX3(n1,n2,n3) max(n1,max(n2,n3))
#define MX4(n1,n2,n3,n4) max(n1,max(n2,max(n3,n4)))
#define mxar(a,n) *max_element(a,a+n)
#define mnar(a,n) *min_element(a,a+n)
#define arr_sm(a,n) accumulate(a,a+n,0)
#define vc_sm(ve,i,j) accumulate(ve.begin()+i,ve.begin()+j+1,0)
#define mx_vc(ve) *max_element(ve.begin(),ve.end())
#define mn_vc(ve) *min_element(ve.begin(),ve.end())
//#define endl " \n"

/*** STLs ***/
typedef vector <ll> vll;
#define vvll vector<vll>
typedef set <ll> sll;
typedef multiset <ll> msll;
//typedef multimap <ll> mpll;
typedef queue <ll> qll;
typedef map <ll, ll> mll;
typedef pair <ll, ll> pll;
typedef vector <pair <ll, ll> > vpll;
typedef priority_queue <pair <ll, ll> > pqpll;
#define ml unordered_map<ll,ll>
///typedef    unordered_multiset<int>   umsi;
typedef    unordered_set<ll>   us;
#define    oncnt    __builtin_popcount
#define    zerobegin   __builtin_clz
#define    zeroend   __builtin_ctz
#define    parity   __builtin_parity

///vector<vector<int>> v(10, vector<int>(20,500)); 2d vector initialization. of 10 rows and 20 columns, with value 500.

/*** Sorts ***/
#define all(v) (v).begin(), (v).end()
#define rev(v) reverse(all(v))
#define srt(v) sort(all(v))
#define srtgrt(v) sort(all(v), greater<ll>())
#define prsrt greater<pair<int,int>>()
/*** Some Prints ***/
#define ip(n) ll n; cin>>n;
#define ip2(n,k) ll n; cin>>n; ll k; cin>>k;
#define kl    '\n'
#define no cout << "NO" << '\n'
#define yes cout << "YES" << '\n'
#define case cout << "Case " << t++ << ": ";
#define ps(x,y)         fixed<<setprecision(y)<<x
#define inf             1e18
#define dbg(x) cout << '>' << #x << ':' << x << endl;
#define w(x)             ll x; cin>>x; while(x--)
bool isPtSquare(long double x)
{
    long double sr = sqrt(x);
    return ((sr - floor(sr)) == 0);
}

ll facts(ll n,ll mod)
{
	ll prod=1;
	for(ll i=1;i<=n;i++)
	{
		prod=(prod*i)%mod;
	}
	return prod;
}

bool isvwl(char ch) {
    if(ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u')
         return true;
    else return false;
}
ll mod = 1e9+7;
lli powers(lli b, lli p, lli m = mod){
    lli res = 1;
    while(p > 0){
        if(p & 1){
            res = (res * b) % m;
        }
        b = (b * b) % m;
        p = p>>1;
    }
    return res;
}

lli modInverse(lli n, lli m = mod){
    return powers(n, m - 2, m);
}

vector<ll> factors(ll n){ // returns all factors of a given number
    ll lim = sqrt(n);
    vector<ll> f;
    for(int i = 1; i <= lim; i++){
        if(n % i == 0){
            f.push_back(i);
            f.push_back(n / i);
            if(i*i == n){
                f.pop_back();
            }
        }
    }
    return f;
}

ll ceilAB(ll a, ll b){
    return (a + b - 1) / b;
}
ll bigmod(ll n,ll pow)
{
    if(pow==0)
        return 1;
    if(pow==1)
        return n%mod;

    ll ans=bigmod(n,pow/2);
    ans=(ans*ans)%mod;

    if(pow%2==1)
    {
        ans=(ans*n)%mod;
    }
    return ans%mod;
}
ll binpow(ll a, ll b, ll mod = 2e18){
	ll ans = 1;
	while(b){
		if(b&1) ans*=a;
		a*=a;
		ans%=mod;
		a%=mod;
		b/=2;
	}
	return ans;
}
const int mxn = 1e3;

ll fact[mxn + 1];
void calcfac(ll n, ll mod = 2e18){
	fact[0]  = 1;
	for(int i = 1; i<=n;++i){
		fact[i] = fact[i-1]*i;
		fact[i] %= mod;
	}
}

ll nCr(ll p, ll q, ll mod = 2e18){
	ll val = fact[p];
	ll invfact = fact[q]*fact[p-q];
	val%=mod;
	invfact%=mod;
	val*=binpow(invfact, mod - 2, mod);
	return val%mod;
}

ll nPr(ll p, ll q, ll mod = 2e18){
	ll val = nCr(p, q, mod);
	val*=fact[q];
	val%=mod;
	return val;
}

bool isprime(int n)
{
    if (n <= 1)
        return false;
    if (n <= 3)
        return true;
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    for (int i = 5; i * i <= n; i += 6)
    {
        if ((n % i == 0) || (n % (i + 2) == 0))
            return false;
    }
    return true;
}
ll power(ll x, ll y)
{
    ll temp;
    if(y == 0)
        return 1;
    temp = power(x, y / 2);
    if (y % 2 == 0)
        return temp * temp;
    else
    {
        if(y > 0)
            return (x * temp * temp);
        else
            return ((temp * temp) / x);
    }
}
//#define mod 10000007

//ll pmod(ll a,ll b){ll res=1;a%=mod;assert(b>=0);for(; b; b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
//ll expo(ll x, ll y){ ll res = 1; x = x % mod;  while (y > 0) { if (y & 1)res = (res*x) % mod; y = y>>1;x = (x*x) % mod;}return res;}
//void matmul(ll a[][2], ll b[][2]) { ll tmp[2][2]; for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { tmp[i][j] = 0; for(int k=0; k<2; k++) tmp[i][j] = (tmp[i][j] + a[i][k]*b[k][j]) % mod; }} for(int i=0; i<2; i++) for(int j=0; j<2; j++) a[i][j] = tmp[i][j]; }
//ll fibo(int n)    // returns nth fibonacci number, also S(n) = f(n+2)-1
//{ if(n == 0) return 0; else if(n == 1) return 1; ll T[2][2] = { {0, 1} , {1, 1} }; ll res[2][2] = { {1, 0}, {0,1} }; n--; while(n) { if(n & 1) matmul(res, T); n >>= 1; matmul(T, T); } return res[1][1]; }

#define go(i, a) for (auto i : a)
#define go1(it, v) for(auto it = v.begin(); it != v.end(); ++it)
#define mk(arr,n,type) type *arr=new type[n];
#define sz(obj) (int(obj.size()))
#define ipve(vc,n) vll vc(n); ff1(i,0,n){cin>>vc[i];}
#define ipvc(vc,n) vll vc; ff1(i,0,n){ip(x);vc.pb(x);}
bool sortbysec(const pair<pair<ll,ll>,ll> &a,const pair<pair<ll,ll>,ll> &b)
{
    return (a.second < b.second);
}
bool cmp(pll a,pll b)
{
    return a.ff - a.ss < b.ff - b.ss;
}

//const ll N = 2e5+10;
//const ll N = 10000;
//const ll mod=1e9+7;
//bool ans = all_of(arr, arr + 6, [](int x) {return x & 1; } );
const double pi = 3.141592653589793238460;
ll cbtr(ll n,ll m)
{
    ll sm = 1;
    ff1(i,1,m+1)
    {
        sm*=(n-i+1);
        sm/=i;
    }
    return sm;
}
//string a="cdefghijklmnopqrstuvwxyz";
ld f(ld n)
{
    ld sm = 1;
    ff1(i,1,n+1)
    {
        sm*=i;
    }
    return sm;
}
ld pc(ld n, ld k)
{
    ld sm = f(n)/f(n-k);
    return sm;
}
map< ll, int > prime_factor(ll n) {
  map< ll, int > ret;
  for(ll i = 2; i * i <= n; i++) {
    while(n % i == 0) {
      ret[i]++;
      n /= i;
    }
  }
  if(n != 1) ret[n] = 1;
  return ret;
}
bool p2(ll n)
{
    if(n==0)
        return false;

    return (ceil(log2(n)) == floor(log2(n)));
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
 ll h,m,h1,m1; char c,c1;
 cin>>h>>c>>m>>h1>>c1>>m1; ll d;

 if(h>h1)
    d = (24 - abs(h-h1))*60;
 else d= abs(h-h1)*60;
 d+=abs(m-m1);
 if(d<20)
 {
     d = 24*60 - abs(m-m1);
 }
 d/=2;
 ll k = d/60;
 ll p = d%60;
 k+=h; p+=m;
 cout<<k<<":"<<p;
  return 0;
}

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string x, y;
    cin >> x >> y;
    string h1, h2, m1, m2;
    bool flag = true;
    for (int i = 0; i < x.size(); i++)
    {
        if (flag && i < 2)
        {
            h1 += x[i];
            h2 += y[i];
        }
        else if (i > 2)
        {
            m1 += x[i];
            m2 += y[i];
        }
    }

    int a = stoi(h1) % 24;
    int b = stoi(h2) % 24;
    int c = stoi(m1) % 60;
    int d = stoi(m2) % 60;

    x.clear();
    y.clear();

    x += to_string((a + b) / 2);

    if(a+b==12)
    {
        x.clear();
        x+="0";
    }

    if (b-a == 1)
    {
        y+=to_string(abs(((c+d)/2) - 30));
    }
    else
    {
        y+=to_string((c+d)/2);
    }

    if (x.size() == 1)
        cout << "0" << x << ":";
    else
        cout << x << ":";

    if (y.size() == 1)
        cout << "0" << y << endl;
    else
        cout << y << endl;

    return 0;
}

#include <bits/stdc++.h>

#define FOR(i,n)		for(int i=0;i<n;i++)
#define FOR1(i,n)		for(int i=1;i<=n;i++)
#define sc(i)			scanf("%d", &i)
#define scl(i)			scanf("%lld", &i);
#define rep(i,n,s)		for(i=s;i<n;i++)
#define repr(i,n,s)		for(i=s;i>=n;i--)
#define remax(x,y)		x = max(x,(y))
#define remin(x,y)		x = min(x,(y))
#define all(c)			(c).begin(),(c).end()
#define allr(c)         (c).rbegin(),(c).rend()
#define loop(c,i)       for(typeof(c.begin()) i = c.begin(); i != c.end(); i++)
#define loopr(c,i)      for(typeof(c.end()) i = c.end(); i != c.begin(); )
#define ll long long
#define ittr(v) typeof(v)::iterator
#define fast  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

#define pb	push_back
#define mp 	make_pair
#define vi 	vector<int>
#define vvi vector< vi >
#define vpii 	vector< pair<int,int> >
#define pii 	pair<int,int>

#define umii 	unordered_map<int,int>

#define F first
#define S second
#define MOD 1000000007
using namespace std;

int main()
{
ll h1,m1,h2,m2;
char ch1,ch2;

cin>>h1>>ch1>>m1>>h2>>ch2>>m2;

    ll h3=h2-h1;
    ll m3=m2-m1;

    ll d=(h3*60+m3)/2;

    m1=m1+d%60;
    h1=h1+(d-m1)/60;

    if(h1<10&&m1<10)
        cout<<0<<h1<<":"<<0<<m1;
    else if(h1>=10&&m1<10)
            cout<<h1<<":"<<0<<m1;
       else if(h1<10&&m1>=10)
                cout<<0<<h1<<":"<<m1;
       else
        cout<<h1<<":"<<m1;
return 0;
}