#include <iostream>
    #include <vector>
    #include <string>
    #include <cmath>
    #include<algorithm>
    
    using namespace std;
    
    bool checkValidity(string s);
    bool validCheckSum(string s);
    string makeISBN13(string s);
    
    int main() {
    
        int n;
        string s;
        cin >> n;
        for (int i = 0; i < n; ++i) {
            cin >> s;
            if (checkValidity(s)) {
                if (validCheckSum(s)) {
                    cout << makeISBN13(s) << endl;
                } else {
                    cout << "invalid" << endl;
                }
            } else {
                cout << "invalid" << endl;
            }
        }
    
        
        
        return 0;
    }
    
    bool checkValidity(string s) {
        bool valid = true;
        int hyphenCount = 0;
        int validCharCount = 0;
    
        if (s.length() < 10 or s.length() > 13) {
            valid = false;
            // cout << "lenght fail    length" << s.length() <<  endl;
        }
    
        if (s[0] == '-' or s[s.length() - 1] == '-') {
            valid = false;
            // cout << "end/start fail" << endl;
    
        }
    
        for (int i = 0; i < s.length(); ++i) {
            if (s[i] == '-') {
                ++hyphenCount;
            } else if (isdigit(s[i]) or s[s.length()-1] == 'X') {
                ++validCharCount;
            }
            if (i != s.length()-1) {
                if (!isdigit(s[i])) {
                    if (s[i] != '-') {
                            valid = false;                
                    } 
                }
            } else {
                if (!isdigit(s[i])) {
                    if (s[i] != 'X') {
                            valid = false;                
                    } 
                }
            }
    
            if (s[i] == '-' and s[i+1] == '-') {
                valid = false;
                // cout << "back to back hyphen" << endl;
    
            }
        }
    
        if (hyphenCount > 3) {
            valid = false;
            //  cout << "too many hyphen" << endl;
    
        } else if (hyphenCount == 3) {
            if (s[s.length() - 1 - 1] != '-') {
                valid = false;
                // cout << "hyphen not at end before checksum" << endl;
    
            }
        }
    
        if (validCharCount != 10) {
            valid = false;
        }
    
        return valid;
    }
    
    bool validCheckSum(string s) {
        vector<int> vec;
        int count = 0;
        bool valid = true;
    
        s.erase(remove(s.begin(), s.end(), '-'), s.end());
        // cout << "string " << s << endl;
    
        for (int i = 0; i < s.length(); ++i) {
            if (isdigit(s[i])) {
                vec.push_back(s[i] - '0');
            } else {
                vec.push_back(10);
            }
        }
    
    
        int j = 10;
        int tmp;
    
        for (int i = 0; i < 10; ++i) {
            count +=  (j * vec[i]);
            --j;
        }
        //  cout << count << endl;
    
        if (count % 11 != 0) {
            valid = false;
        }
    
        return valid;
    }
    
    string makeISBN13(string s) {
        vector<int> vec;
        int count = 0;
        bool valid = true;
        string prepend = "978-";
        s = prepend + s;
        string scopy = s;
    
    
        s.erase(remove(s.begin(), s.end(), '-'), s.end());
        // cout << "string " << s << endl;
    
        for (int i = 0; i < s.length(); ++i) {
            if (isdigit(s[i])) {
                vec.push_back(s[i] - '0');
            } else {
                vec.push_back(10);
            }
        }
    
        int tmp;
    
        for (int i = 0; i < vec.size(); ++i) {
            if (i % 2 == 0) {
                count += vec[i];
            } else {
                count += 3 * vec[i];
            }
        }
        //  cout << count << endl;
    
        int rem = count % 10;
        vec[vec.size() - 1] += (10-rem);
        vec[vec.size() - 1] %= 10;
    
        string a = to_string(vec[vec.size() -1]);
        scopy.replace(scopy.size() - 1, 1, a);
        return scopy;
    }