#include <stdio.h>
#include <string.h>
#include <ctype.h>

// 将字符转换为数值,支持0-9和A-F
int charToInt(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    return c - 'A' + 10;
}

// 将数值转换为字符
char intToChar(int x) {
    if (x < 10) return '0' + x;
    return 'A' + (x - 10);
}

// 判断数组a[0..len-1](低位在前)是否为回文
int isPalindrome(int a[], int len) {
    for (int i = 0; i < len / 2; i++) {
        if (a[i] != a[len - 1 - i]) return 0;
    }
    return 1;
}

// N进制加法:a + reverse(a) 结果存入新数组,返回新长度
int addReverse(int a[], int len, int N, int res[]) {
    // 先得到a的逆序b
    int b[1000];
    for (int i = 0; i < len; i++) {
        b[i] = a[len - 1 - i];
    }
    // 相加
    int carry = 0;
    int maxLen = len; // 结果长度至少为len
    for (int i = 0; i < len; i++) {
        int sum = a[i] + b[i] + carry;
        res[i] = sum % N;
        carry = sum / N;
    }
    if (carry) {
        res[len] = carry;
        maxLen = len + 1;
    } else {
        maxLen = len;
    }
    return maxLen;
}

int main() {
    int N;
    char M[1000];
    scanf("%d", &N);
    scanf("%s", M);

    // 将M转换为数字数组,低位在前
    int len = strlen(M);
    int a[1000];
    for (int i = 0; i < len; i++) {
        a[i] = charToInt(M[len - 1 - i]); // 低位在前
    }

    int step = 0;
    while (step <= 30) {
        if (isPalindrome(a, len)) {
            printf("STEP=%d\n", step);
            return 0;
        }
        if (step == 30) break; // 已经30步未成功,再一步会超过30
        int res[1000];
        len = addReverse(a, len, N, res);
        // 将结果复制回a
        for (int i = 0; i < len; i++) a[i] = res[i];
        step++;
    }
    printf("Impossible!\n");
    return 0;
}