#include <bits/stdc++.h>
using namespace std;
int n, m, pp[401000], h0[401000], h1[401000];
char s[401000];
int get0(int l, int r) { return (h0[r] - h0[l - 1]) * pp[n - r]; }
int get1(int l, int r) { return (h1[r] - h1[l - 1]) * pp[l - 1]; }
bool par(int i, int m) {
  return m <= 1 || i - m + 1 > 0 && get0(i - m + 1, i) == get1(i - m + 1, i);
}
void update(int pos) {
  h0[pos] = h0[pos - 1] + s[pos] * pp[pos];
  h1[pos] = h1[pos - 1] + s[pos] * pp[n - pos + 1];
}
bool exam(int pos) {
  if (pos == n + 1) return 1;
  update(pos);
  for (int _ = (1); _ <= (26); _++) {
    if (pos - m + 1 <= 0 || s[pos] != s[pos - m + 1] || !par(pos - 1, m - 2))
      if (pos - m <= 0 || s[pos] != s[pos - m] || !par(pos - 1, m - 1)) break;
    if (s[pos] == 'z') return 0;
    s[pos]++;
    update(pos);
  }
  if (pos != n) s[pos + 1] = 'a';
  return exam(pos + 1);
}
int main() {
  scanf("%d%s", &m, s + 1);
  n = strlen(s + 1);
  pp[0] = 1;
  for (int i = (1); i <= (n); i++) pp[i] = pp[i - 1] * 100007;
  for (int i = (1); i <= (n); i++) update(i);
  int pos = n;
  for (int i = (1); i <= (n); i++)
    if (par(i, m) || par(i, m + 1)) {
      pos = i;
      break;
    }
  for (; pos; pos--) {
    if (s[pos] == 'z') continue;
    s[pos]++;
    update(pos);
    if (exam(pos)) return puts(s + 1), 0;
  }
  puts("Impossible");
  return 0;
}
