#include <bits/stdc++.h>
#define maxn 100003
using namespace std;
struct Data {
int x, step;
};
int s, m, n;
int vis[maxn];
queue<Data> q;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> s >> m;
int _tmp = s;
while (_tmp) {
_tmp /= 10;
n++;
}
while(m--) {
memset(vis, 0, sizeof(vis));
while (q.size()) q.pop();
int t, flag = 0;
cin >> t;
q.push((Data){s, 0});
while (q.size()) {
Data f = q.front(); q.pop();
int x = f.x;
if (x == t) {
cout << f.step << '\n';
flag = 1;
break;
}
if (vis[x]) continue;
vis[x] = 1;
int a[10] = {0};
int len = 0;
while(x) {
a[++len] = x % 10;
x /= 10;
}
if (len == 1) continue;
for (int i = 1; i <= len; i++) {
for (int j = i + 1; j <= len; j++) {
swap(a[i], a[j]);
int tmp = 0;
for (int k = len; k >= 1; k--) {
tmp = tmp * 10 + a[k];
}
q.push((Data){tmp, f.step + 1});
swap(a[i], a[j]);
}
}
for (int i = 1; i <= len; i++) {
int tmp = 0;
for (int j = len; j >= 1; j--) {
if (i == j) continue;
tmp = tmp * 10 + a[j];
}
q.push((Data){tmp, f.step + 1});
}
if (len == n) continue;
for (int i = 1; i <= len - 1; i++) {
for (int k = a[i + 1] + 1; k < a[i]; k++) {
int tmp = 0;
for (int j = len; j > i; j--) {
tmp = tmp * 10 + a[j];
}
tmp = tmp * 10 + k;
for (int j = i; j >= 1; j--) {
tmp = tmp * 10 + a[j];
}
q.push((Data){tmp, f.step + 1});
}
}
}
if (flag == 0) {
cout << -1 << '\n';
}
}
return 0;
}