只有#1 AC
#include <iostream>
using namespace std;
const int N = 309;
int a[N], b[N], n, len;
string s1;
int step = 1;
void add();
void reserve();
bool pd();
int main() {
scanf("%d", &n);
cin >> s1;
for (int i = 0; i < s1.length(); ++i)
if (s1[i] <= '9' && s1[i] >= '0') {
a[i] = s1[i] - '0';
}
else {
a[i] = s1[i] - 'A' + 10;
}
len = s1.length();
/*for (int i = 0; i < len; ++i) {
cout << a[i] << endl;
}
cout << len << endl;*/
while (!pd()) {
reserve();
add();
++step;
}
if (step <= 30) {
printf("STEP=%d\n", step);
}
else {
printf("Impossible!\n");
}
return 0;
}
void add() {
/*for (int i = 0; i < len; ++i) {
cout << a[i];
}
cout << endl;
for (int i = 0; i < len; ++i) {
cout << b[i];
}
cout << endl << endl << step << " " << len << endl << endl << endl;*/
for (int i = 0; i < len; ++i) {
a[i] = a[i] + b[i];
}
for (int i = 0; i < len; ++i) {
if (a[i] >= n) {
a[i + 1]++, a[i] -= n;
// cout << a[i];
}
}
if (a[len + 1] > 0) {
++len;
}
}
void reserve() {
for (int i = 0; i < len; ++i) {
b[i] = a[len - i - 1];
}
}
bool pd() {
for (int p1 = 0, p2 = len - 1; p1 < p2; ++p1, --p2)
if (a[p1] != a[p2]) {
return false;
}
return true;
}