#include    <iostream>
#include    <string>

using namespace std;

int main() {
    // まず、mod26上のAと26がお互いに素となるAの値は、
    // {1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25}
    // である。問題で変換したアフィン暗号のパラメータAは、
    // この条件を満たすため、Aはこの範囲で決定できる。
    // 次に、A*(A^) mod 26 = 1となるモジュロ逆数A^は
    // {1, 9, 21, 15, 3, 19, 7, 23, 11, 5, 17, 25}
    // となるが、集合と見た場合はAと一致する。よって、
    // 順序を気にしない全探索の場合はAのパラメータを回すだけでよい
    int n;
    const int palmA[] = {1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25};

    cin >> n;
    cin.ignore();
    for(int i = 0; i < n; i++) {
        string cipher;
        getline(cin, cipher);

        for(auto a : palmA) {
            for(int b = 0; b < 26; b++) {
                string plain;
                // 複合処理
                // 暗号化関数 F(l)=(al+b) mod 26 より
                // 復号化関数 F^(l)=a(l-b) mod 26
                for(auto v : cipher)
                    plain += (v == ' ') ? ' ' : (a*((v-'a')+b) % 26 + 'a');
                if(plain.find("this") != -1 || plain.find("that") != -1) {
                    cout << plain << endl;
                }
            }
        }
    }
    return 0;
}
