#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==