#include <iostream>
#include <queue>
#include <unordered_set>
#include <string>
using namespace std;
int openLock(vector<string>& deadends, string target) {
unordered_set<string> dead(deadends.begin(), deadends.end());
unordered_set<string> visited;
// Check if the initial state is a deadend or the target itself.
if (dead.find("0000") != dead.end()) return -1;
if (target == "0000") return 0;
// BFS setup
queue<pair<string, int>> q;
q.push({"0000", 0});
visited.insert("0000");
while (!q.empty()) {
string curr = q.front().first;
int steps = q.front().second;
q.pop();
// Try all possible moves
for (int i = 0; i < 4; ++i) {
for (int d = -1; d <= 1; d += 2) { // -1 for decrement, +1 for increment
string next = curr;
next[i] = (next[i] - '0' + d + 10) % 10 + '0'; // rotate the i-th digit
if (next == target) return steps + 1; // Target found
if (dead.find(next) == dead.end() && visited.find(next) == visited.end()) {
visited.insert(next);
q.push({next, steps + 1});
}
}
}
}
return -1; // No solution found
}
int main() {
int n;
cin >> n;
vector<string> deadends(n);
for (int i = 0; i < n; ++i) {
cin >> deadends[i];
}
string target;
cin >> target;
cout << openLock(deadends, target) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBvcGVuTG9jayh2ZWN0b3I8c3RyaW5nPiYgZGVhZGVuZHMsIHN0cmluZyB0YXJnZXQpIHsKICAgIHVub3JkZXJlZF9zZXQ8c3RyaW5nPiBkZWFkKGRlYWRlbmRzLmJlZ2luKCksIGRlYWRlbmRzLmVuZCgpKTsKICAgIHVub3JkZXJlZF9zZXQ8c3RyaW5nPiB2aXNpdGVkOwogICAgCiAgICAvLyBDaGVjayBpZiB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBhIGRlYWRlbmQgb3IgdGhlIHRhcmdldCBpdHNlbGYuCiAgICBpZiAoZGVhZC5maW5kKCIwMDAwIikgIT0gZGVhZC5lbmQoKSkgcmV0dXJuIC0xOwogICAgaWYgKHRhcmdldCA9PSAiMDAwMCIpIHJldHVybiAwOwoKICAgIC8vIEJGUyBzZXR1cAogICAgcXVldWU8cGFpcjxzdHJpbmcsIGludD4+IHE7CiAgICBxLnB1c2goeyIwMDAwIiwgMH0pOwogICAgdmlzaXRlZC5pbnNlcnQoIjAwMDAiKTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIHN0cmluZyBjdXJyID0gcS5mcm9udCgpLmZpcnN0OwogICAgICAgIGludCBzdGVwcyA9IHEuZnJvbnQoKS5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgLy8gVHJ5IGFsbCBwb3NzaWJsZSBtb3ZlcwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgICAgIGZvciAoaW50IGQgPSAtMTsgZCA8PSAxOyBkICs9IDIpIHsgIC8vIC0xIGZvciBkZWNyZW1lbnQsICsxIGZvciBpbmNyZW1lbnQKICAgICAgICAgICAgICAgIHN0cmluZyBuZXh0ID0gY3VycjsKICAgICAgICAgICAgICAgIG5leHRbaV0gPSAobmV4dFtpXSAtICcwJyArIGQgKyAxMCkgJSAxMCArICcwJzsgIC8vIHJvdGF0ZSB0aGUgaS10aCBkaWdpdAogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gdGFyZ2V0KSByZXR1cm4gc3RlcHMgKyAxOyAgLy8gVGFyZ2V0IGZvdW5kCiAgICAgICAgICAgICAgICBpZiAoZGVhZC5maW5kKG5leHQpID09IGRlYWQuZW5kKCkgJiYgdmlzaXRlZC5maW5kKG5leHQpID09IHZpc2l0ZWQuZW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICB2aXNpdGVkLmluc2VydChuZXh0KTsKICAgICAgICAgICAgICAgICAgICBxLnB1c2goe25leHQsIHN0ZXBzICsgMX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAtMTsgIC8vIE5vIHNvbHV0aW9uIGZvdW5kCn0KCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxzdHJpbmc+IGRlYWRlbmRzKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBjaW4gPj4gZGVhZGVuZHNbaV07CiAgICB9CiAgICBzdHJpbmcgdGFyZ2V0OwogICAgY2luID4+IHRhcmdldDsKICAgIGNvdXQgPDwgb3BlbkxvY2soZGVhZGVuZHMsIHRhcmdldCkgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==