#include <stdio.h>
#include <string.h>
//最主要注意数组下标位置!!!
void sum_judge_reverse(int judge_arr[], int reverse_arr[], int* lenth, int N)
{
    //从低位开始相加,有进位产生进位
    for (int i = *lenth - 1; i > 0; i--)
    {
        int sum = judge_arr[i] + reverse_arr[i - 1];
        if (sum < N)//不产生进位
            judge_arr[i] = sum;
        else
        {
            judge_arr[i - 1] ++;//进位1
            judge_arr[i] = sum % N;
        }
    }
    //相加完后,判断高位有没有进位,如果有进位,整体再向后移动4个字节
    //一直保持有进位的状态,并且可以直接调用回文判断(judge_palind_num)
    if (judge_arr[0] != 0)
    {
        for (int i = *lenth-1; i >= 0; i--)
        {
            judge_arr[i+1] = judge_arr[i];
        }
        judge_arr[0] = 0;
        (*lenth)++; //judge_arr 扩大4个字节
    }
}

void judge_to_reverse(int judge_arr[], int reverse_arr[], int lenth)
{
    for (int i = 1; i < lenth; i++)
    {
        reverse_arr[i - 1] = judge_arr[lenth-i];//注意judge_arr数组前多了一个judge_arr[0]
    }
}

int judge_palind_num(int judge_arr[], int lenth)//判断回文数
{
    int left = 1;
    int right = lenth - 1;
    while (right > left)
    {
        if (judge_arr[left++] != judge_arr[right--])
        {
            return 0; //前后存在一组不相等,返回0
        }
    }
    return 1;//是回文数返回1
}

void turn_char_to_int(char receive_arr[], int judge_arr[], int* lenth)
{
    for (int i = 1;i <= *lenth;i++)
    {
        //i 从1开始给judge_arr赋值,前面预留一位judge_arr[0] 用作进位
        if (receive_arr[i-1] >= '0' && receive_arr[i-1] <= '9')
            judge_arr[i] = receive_arr[i - 1] - '0';
        else
            judge_arr[i] = receive_arr[i - 1] - 'A' + 10;
    }
    (*lenth)++;//因为多了一位judge_arr[0]
}

int main(void)
{
    int N;//进制
    char receive_arr[100] = { 0 };//把数字当做字符串接收
    int judge_arr[101] = { 0 };//判断是否为回文数数组,字符串转数字存到此数组中
    int reverse_arr[100] = { 0 };//将judge_arr中的数字逆序放入此数组,并于judge_arr中的数相加

    scanf("%d", &N);
    scanf("%s", receive_arr);
    int len = strlen(receive_arr);//计算输入数组的长度
    int step = 0;

    //1.把字符数组转化为数字
    turn_char_to_int(receive_arr, judge_arr, &len);
    for (step = 0; step < 30; step++)//循环判断30次,是否为回文数
    {
        //2.判断judge_arr数组是否为回文数
        int ret = judge_palind_num(judge_arr, len);
        if (ret)
            break;//相等则跳出循环
        else//不相等,则需要逆序相加
        {
            //3.获取逆序数组
            judge_to_reverse(judge_arr, reverse_arr, len);
            //4.将正序数字与逆序数字相加
            sum_judge_reverse(judge_arr, reverse_arr, &len, N);
        }
    }
    if (step < 30)
        printf("STEP=%d\n", step);
    else
        printf("Impossible!\n");

    return 0;
}