#include #include const int N = 20005; int vis[N], vis2[N][30], on = 0; char out[500005]; int getnext(int x, int a) { return x % (26 * 26) * 26 + a; } void init() { int now = 0; for (int i = 0; i < 3; i++) out[on++] = 'a'; while (true) { int Min = 26, iv = 0; for (int i = 1; i < 26; i++) { if (vis2[now][i]) continue; int tmp = getnext(now, i); if (vis[tmp] < Min) { Min = vis[tmp]; iv = i; } } int tmp = getnext(now, iv); if (vis[tmp] == 26) break; vis2[now][iv] = 1; now = tmp; vis[now]++; out[on++] = now % 26 + 'a'; } } int n; int main() { init(); while (~scanf("%d", &n)) { if (n > 456979) printf("Impossible\n"); else printf("%s\n", (out + 456979 - n)); } return 0; }