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

char x[200] = { 0 }, y[200] = { 0 };//设置全局变量减少使用函数传参的繁琐

void Offset(char m[200], int longs) {//使用数值对应的ASCII码代替A~F
    for (int i = 0; i < longs; i++) {//例如:存入'A',表示10,但ASCII值为65
        if (m[i] >= '0' && m[i] <= '9') {//将'A'-'A'+10,ASCII值就变成10.
         m[i] = m[i] - '0';
         }
        if (m[i] >= 'A' && m[i] <= 'F') {
            m[i] = m[i] - 'A' + 10;
        }
    }
}
int Check(int longs) {
    for (int i = 0, k = longs - 1; i < k; i++, k--) {
        if (x[i] != x[k])
            return 1;
    }
    return 0;
}

void Change(int longs) {
    for (int i = 0, k = longs - 1; k >= 0; k--, i++) {
        y[i] = x[k];
    }
}
int Add(int n, int longs) { 
    Offset(x, longs); //将数组x,y内字符变成对应ASCII相同的数
    Offset(y, longs);
    char Sum[200] = { 0 };
    for (int k = 0, i = longs - 1; i >= 0;
            i--, k++) {//把两数组之和倒放在Sum数组中
        int sum = x[i] + y[i] + Sum[k];
        Sum[k] = sum % n;
        Sum[k + 1] = sum / n;
        if (sum / n > 0 && i == 0) {
            longs++;//如果首位之和需要进一位,则需要把数组长度加一位
        }
    }
    for (int j = 0; j < longs;j++) {//把Sum回放x数组并转换成原来进制
        x[j] = Sum[longs - j - 1];
        if (x[j] >= 0 && x[j] <= 9) {
            x[j] = x[j] + '0';
        }
        if (x[j] >= 10 && x[j] <= 16) {
            x[j] = x[j] - 10 + 'A';
        }
    }
    return longs;
}
int main() {
    int n, count = 0;
    scanf("%d\n%s", &n, x);
    int len = strlen(x);//记录x数组的元素个数,
    //注意:strlen()从字符串的开头位置依次往后面计数,直到遇到‘\0’停止,所计算的字符串大小为‘\0’以前的字符所计算的值,最终的字符串长度不包括‘\0’
    //所以后面x数组改变后不能再使用strlen函数,因为x数组可能中间存在0,导致计算出的元素个数不对
    while (Check(len)) { //判断是否是回文数
        if (count > 30) {
            printf("Impossible!");//判断进行步数
            return 0;
        }
        Change(len);//把x的翻转数存到y数组中
        len = Add(n, len); //将两数组相加,
        count++;
    }
    printf("STEP=%d", count);
    return 0;
}