George woke up and saw the current time s on the digital clock. Besides, George knows that he has slept for time t. 

Help George! Write a program that will, given time s and t, determine the time p when George went to bed. Note that George could have gone to bed yesterday relatively to the current time (see the second test sample). 

Input

The first line contains current time s as a string in the format "hh:mm". The second line contains time t in the format "hh:mm" — the duration of George's sleep. It is guaranteed that the input contains the correct time in the 24-hour format, that is, 00 ≤ hh ≤ 23, 00 ≤ mm ≤ 59.

Output

In the single line print time p — the time George went to bed in the format similar to the format of the time in the input.

Examples

Input

05:50
05:44


Output

00:06


Input

00:00
01:00


Output

23:00


Input

00:01
00:00


Output

00:01

Note

In the first sample George went to bed at "00:06". Note that you should print the time only in the format "00:06". That's why answers "0:06", "00:6" and others will be considered incorrect. 

In the second sample, George went to bed yesterday.

In the third sample, George didn't do to bed at all.
#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
const long long int INF = LONG_MAX;
const vector<vector<long long int> > adj4({{0, 1}, {0, -1}, {1, 0}, {-1, 0}});
const vector<vector<long long int> > adj8(
    {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1}});
struct DisjointSet {
  vector<long long int> roots;
  vector<long long int> sizes;
  DisjointSet(long long int n) {
    sizes = vector<long long int>(n, 1);
    roots = vector<long long int>(n);
    for (long long int i = 0; i < (n); ++i) roots[i] = i;
  }
  long long int root(long long int a) {
    return roots[a] == a ? a : root(roots[a]);
  }
  void join(long long int a, long long int b) {
    long long int ra = root(a);
    long long int rb = root(b);
    if (sizes[a] > sizes[b]) {
      roots[rb] = ra;
      sizes[ra] += sizes[rb];
    } else {
      roots[ra] = rb;
      sizes[rb] += sizes[ra];
    }
  }
};
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
bool isprime(long long int n) {
  if (n == 2 || n == 3) return true;
  if (n < 2 || n % 2 == 0 || n % 3 == 0) return false;
  for (long long int i = 6; (i - 1) * (i - 1) <= n; i += 6) {
    if (n % (i - 1) == 0 || n % (i + 1) == 0) {
      return false;
    }
  }
  return true;
}
vector<bool> sprime;
void genPrime(long long int sz) {
  sprime = vector<bool>(sz, true);
  sprime[0] = false;
  sprime[1] = false;
  for (long long int i = (2); i < (sz); ++i) {
    for (long long int j = i * i; j < sz; j += i) {
      sprime[j] = false;
    }
  }
}
vector<long long int> facts;
bool factGenFlag = false;
void genFact(long long int n) {
  factGenFlag = true;
  facts = vector<long long int>(n + 1);
  facts[0] = 1;
  for (long long int i = (1); i < (n + 1); ++i) {
    facts[i] = facts[i - 1] * i;
  }
}
void genFactMod(long long int n, long long int mod) {
  factGenFlag = true;
  facts = vector<long long int>(n + 1);
  facts[0] = 1;
  for (long long int i = (1); i < (n + 1); ++i) {
    facts[i] = facts[i - 1] * i % mod;
  }
}
long long int fact(long long int a, long long int n) {
  if (factGenFlag && a < 3) return facts[n];
  long long int r = 1;
  for (long long int i = (a); i < (n + 1); ++i) {
    r *= i;
  }
  return r;
}
long long int factMod(long long int a, long long int n, long long int mod) {
  if (factGenFlag && a < 3) return facts[n];
  long long int r = 1;
  for (long long int i = (a); i < (n + 1); ++i) {
    r *= i;
    r %= mod;
  }
  return r;
}
long long int powMod(long long int a, long long int b, long long int mod) {
  long long int n = 1;
  long long int p = a;
  while (b > 0) {
    if (b % 2 == 1) {
      n *= p;
      n %= mod;
    }
    p *= p;
    p %= mod;
    b /= 2;
  }
  return n;
}
long long int modularInverse(long long int a, long long int mod) {
  return powMod(a, mod - 2, mod);
}
long long int ent(long long int a, long long int b) {
  long long int r = fact(a - b + 1, a);
  long long int d = fact(2, b);
  long long int ent = r / d;
  return ent;
}
long long int entMod(long long int a, long long int b, long long int mod) {
  long long int r = factMod(a - b + 1, a, mod);
  long long int d = factMod(2, b, mod);
  long long int ent = r * modularInverse(d, mod) % mod;
  return ent;
}
long long int bsfunction(long long int n) { return 0; }
long long int binarysearch(long long int left, long long int right,
                           long long int target) {
  if (left == right) {
    return left;
  }
  long long int mid =
      (left + right > 0) ? (left + right) / 2 : (left + right - 1) / 2;
  long long int val = bsfunction(mid);
  if (val > target) {
    return binarysearch(left, mid, target);
  } else if (val == target) {
    return mid;
  } else {
    return binarysearch(mid + 1, right, target);
  }
}
vector<long long int> topores;
vector<bool> topovisperm;
vector<bool> topovistemp;
vector<vector<long long int> > topograph;
bool topoimp;
void toposortvisit(long long int step) {
  if (topovisperm[step]) return;
  if (topovistemp[step]) {
    topoimp = true;
    return;
  }
  topovistemp[step] = true;
  for (long long int p : topograph[step]) {
    toposortvisit(p);
    if (topoimp) return;
  }
  topovisperm[step] = true;
  topores.push_back(step);
}
void toposort() {
  long long int n = topograph.size();
  topoimp = false;
  topovistemp = vector<bool>(n, false);
  topovisperm = vector<bool>(n, false);
  topores = vector<long long int>();
  topores.reserve(n);
  for (long long int i = 0; i < (n); ++i) {
    if (!topovisperm[i]) {
      toposortvisit(i);
      if (topoimp) {
        return;
      }
    }
  }
}
stringstream sss;
void MAIN() {
  long long int a1;
  cin >> a1;
  char x;
  cin >> x;
  long long int a2;
  cin >> a2;
  long long int b1;
  cin >> b1;
  cin >> x;
  long long int b2;
  cin >> b2;
  long long int c2 = a2 - b2;
  long long int c1 = a1 - b1;
  if (c2 < 0) {
    c2 += 60;
    c1 -= 1;
  }
  if (c1 < 0) {
    c1 += 24;
  }
  if (c1 < 10) {
    cout << 0;
  }
  cout << c1 << ':';
  if (c2 < 10) {
    cout << 0;
  }
  cout << c2 << endl;
}
const long long int TESTCASEN = 1;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  sss << R"(
    )";
  for (long long int i = 0; i < (TESTCASEN); ++i) {
    MAIN();
  }
  return 0;
}
