#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f;
const long long LNF = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 1e5 + 5;
const long long mod = 10000000000007;
const int N = 1e6 + 5;
const int dr[] = {-1, 0, 1, 0, 1, 1, -1, -1};
const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1};
const char *Hex[] = {"0000", "0001", "0010", "0011", "0100", "0101",
                     "0110", "0111", "1000", "1001", "1010", "1011",
                     "1100", "1101", "1110", "1111"};
inline long long gcd(long long a, long long b) {
  return b == 0 ? a : gcd(b, a % b);
}
inline int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int n, m;
const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inline int Min(int a, int b) { return a < b ? a : b; }
inline int Max(int a, int b) { return a > b ? a : b; }
inline long long Min(long long a, long long b) { return a < b ? a : b; }
inline long long Max(long long a, long long b) { return a > b ? a : b; }
inline bool is_in(int r, int c) { return r >= 0 && r < n && c >= 0 && c < m; }
int main() {
  while (scanf("%d", &n) == 1) {
    int h, s;
    scanf("%d:%d", &h, &s);
    if (n == 12) {
      if (h > 12) {
        int t = h % 10;
        int tt = h / 10 % 10;
        if (t == 0)
          h = 10;
        else if (t < 3)
          h = 10 + t;
        else if (tt < 2)
          h = tt * 10 + 0;
        else
          h = t;
      } else if (h == 0)
        h = 10;
    } else {
      if (h > 23) {
        int t = h % 10;
        int tt = h / 10 % 10;
        if (t == 0)
          h = 10;
        else if (t < 4)
          h = 10 + t;
        else if (tt < 3)
          h = tt * 10 + 0;
        else
          h = t;
      }
    }
    int t = s % 10;
    if (s >= 60) s = 10 + t;
    printf("%02d:%02d\n", h, s);
  }
  return 0;
}
