#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7;
const int maxn = 510000;
int n, K;
bool flag;
char A[maxn], B[maxn];
namespace Ninit {
void init() {
  int i;
  scanf("%d%s", &K, A + 1);
  n = strlen(A + 1);
  for (i = n; i >= 1; --i)
    if (A[i] == 'z')
      A[i] = 'a';
    else {
      ++A[i];
      break;
    }
  i ? flag = true : flag = false;
}
}  // namespace Ninit
namespace Nsolve {
int G[maxn], F[maxn], pw[maxn];
int ok(int y, int l) {
  int x = y - l;
  if (x < 0) return true;
  return (G[y] - G[x] * pw[l]) * pw[x + 1] != F[y] - F[x];
}
bool dfs(int x, bool y) {
  if (x > n) return true;
  char i;
  for (i = y ? 'a' : A[x]; i <= 'z'; ++i) {
    B[x] = i, F[x] = F[x - 1] + i * pw[x], G[x] = G[x - 1] * P + i;
    if (ok(x, K) && ok(x, K + 1) && dfs(x + 1, y || i > A[x])) return true;
  }
  return false;
}
void solve() {
  int i;
  if (!flag) return printf("Impossible\n"), void();
  for (pw[0] = 1, i = 1; i <= n; ++i) pw[i] = pw[i - 1] * P;
  dfs(1, 0) ? printf("%s\n", B + 1) : printf("Impossible\n");
}
}  // namespace Nsolve
int main() {
  Ninit::init();
  Nsolve::solve();
  return 0;
}
