#include <bits/stdc++.h>
using namespace std;
const long long maxn = 4e5 + 55, b = 199, mod = 2e9 + 11;
long long D1[maxn], D2[maxn], DP1[maxn], DP2[maxn], P[maxn];
long long Po(long long a, long long b) {
  if (!b) return 1;
  long long y = Po(a, b / 2);
  y = y * y % mod;
  if (b % 2) return y * a % mod;
  return y;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long d;
  string s;
  cin >> d >> s;
  long long n = s.size();
  P[0] = 1;
  for (long long i = 1; i < maxn; i++) P[i] = b * P[i - 1] % mod;
  long long inv = Po(b, mod - 2), critic = n - 1;
  long long hashD1 = 0, hashD2 = 0, hashDP1 = 0, hashDP2 = 0;
  for (long long i = 0; i < n; i++) {
    hashD1 = (hashD1 * b + s[i]) % mod;
    if (i >= d) hashD1 = (hashD1 - P[d] * s[i - d] % mod + mod) % mod;
    if (i >= d) {
      hashD2 = (hashD2 - s[i - d] + mod) % mod;
      hashD2 = hashD2 * inv % mod;
    }
    hashD2 = (hashD2 + s[i] * P[min(d - 1, i)]) % mod;
    hashDP1 = (hashDP1 * b + s[i]) % mod;
    if (i >= d + 1)
      hashDP1 = (hashDP1 - P[d + 1] * s[i - d - 1] % mod + mod) % mod;
    if (i >= d + 1) {
      hashDP2 = (hashDP2 - s[i - d - 1] + mod) % mod;
      hashDP2 = hashDP2 * inv % mod;
    }
    hashDP2 = (hashDP2 + s[i] * P[min(d, i)]) % mod;
    if (i >= d - 1 && (hashD1 == hashD2 || hashDP1 == hashDP2))
      critic = min(critic, i);
    D1[i + 1] = hashD1;
    D2[i + 1] = hashD2;
    DP1[i + 1] = hashDP1;
    DP2[i + 1] = hashDP2;
  }
  bool f = 0;
  long long makan = -1, to = -1;
  for (long long i = critic; ~i; i--) {
    if (s[i] == 'z') continue;
    if (i < d - 1) {
      to = s[i] + 1;
      f = 1;
      makan = i;
      s[i] = to;
      hashD1 = D1[i];
      hashD2 = D2[i];
      hashDP1 = DP1[i];
      hashDP2 = DP2[i];
      hashD1 = (hashD1 * b + s[i]) % mod;
      if (i >= d) hashD1 = (hashD1 - P[d] * s[i - d] % mod + mod) % mod;
      if (i >= d) {
        hashD2 = (hashD2 - s[i - d] + mod) % mod;
        hashD2 = hashD2 * inv % mod;
      }
      hashD2 = (hashD2 + s[i] * P[min(i, d - 1)]) % mod;
      hashDP1 = (hashDP1 * b + s[i]) % mod;
      if (i >= d + 1)
        hashDP1 = (hashDP1 - P[d + 1] * s[i - d - 1] % mod + mod) % mod;
      if (i >= d + 1) {
        hashDP2 = (hashDP2 - s[i - d - 1] + mod) % mod;
        hashDP2 = hashDP2 * inv % mod;
      }
      hashDP2 = (hashDP2 + s[i] * P[min(i, d)]) % mod;
      D1[i + 1] = hashD1;
      D2[i + 1] = hashD2;
      DP1[i + 1] = hashDP1;
      DP2[i + 1] = hashDP2;
      break;
    } else if (d > 1) {
      char c = s[i];
      for (to = s[i] + 1; to <= 'z'; to++) {
        s[i] = to;
        hashD1 = D1[i];
        hashD2 = D2[i];
        hashDP1 = DP1[i];
        hashDP2 = DP2[i];
        hashD1 = (hashD1 * b + s[i]) % mod;
        if (i >= d) hashD1 = (hashD1 - P[d] * s[i - d] % mod + mod) % mod;
        if (i >= d) {
          hashD2 = (hashD2 - s[i - d] + mod) % mod;
          hashD2 = hashD2 * inv % mod;
        }
        hashD2 = (hashD2 + s[i] * P[min(i, d - 1)]) % mod;
        hashDP1 = (hashDP1 * b + s[i]) % mod;
        if (i >= d + 1)
          hashDP1 = (hashDP1 - P[d + 1] * s[i - d - 1] % mod + mod) % mod;
        if (i >= d + 1) {
          hashDP2 = (hashDP2 - s[i - d - 1] + mod) % mod;
          hashDP2 = hashDP2 * inv % mod;
        }
        hashDP2 = (hashDP2 + s[i] * P[min(i, d)]) % mod;
        if (hashD1 != hashD2 && hashDP1 != hashDP2) {
          makan = i;
          f = 1;
          D1[i + 1] = hashD1;
          D2[i + 1] = hashD2;
          DP1[i + 1] = hashDP1;
          DP2[i + 1] = hashDP2;
          break;
        }
      }
      if (f) break;
      s[i] = c;
    }
  }
  if (!f) {
    cout << "Impossible";
    return 0;
  }
  for (long long i = makan + 1; i < n; i++) {
    for (s[i] = 'a'; s[i] <= 'z'; s[i]++) {
      hashD1 = D1[i];
      hashD2 = D2[i];
      hashDP1 = DP1[i];
      hashDP2 = DP2[i];
      hashD1 = (hashD1 * b + s[i]) % mod;
      if (i >= d) hashD1 = (hashD1 - P[d] * s[i - d] % mod + mod) % mod;
      if (i >= d) {
        hashD2 = (hashD2 - s[i - d] + mod) % mod;
        hashD2 = hashD2 * inv % mod;
      }
      hashD2 = (hashD2 + s[i] * P[min(i, d - 1)]) % mod;
      hashDP1 = (hashDP1 * b + s[i]) % mod;
      if (i >= d + 1)
        hashDP1 = (hashDP1 - P[d + 1] * s[i - d - 1] % mod + mod) % mod;
      if (i >= d + 1) {
        hashDP2 = (hashDP2 - s[i - d - 1] + mod) % mod;
        hashDP2 = hashDP2 * inv % mod;
      }
      hashDP2 = (hashDP2 + s[i] * P[min(i, d)]) % mod;
      if (hashD1 != hashD2 && hashDP1 != hashDP2) {
        D1[i + 1] = hashD1;
        D2[i + 1] = hashD2;
        DP1[i + 1] = hashDP1;
        DP2[i + 1] = hashDP2;
        break;
      }
    }
  }
  cout << s;
}
