#include <algorithm>
#include <array>
#include <bitset>
#include <cmath>
#include <cstring>
#include <climits>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <numeric>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

void solve() {
    string a;
    int n;
    cin >> a >> n;
    
    vector<int> d(n);
    for (int i = 0; i < n; ++i) {
        cin >> d[i];
    }

    int L = a.length();
    int d_min = d.front();
    int d_max = d.back();

    vector<unsigned long long> candidates;

    if (L > 1) {
        unsigned long long val = 0;
        for (int i = 0; i < L - 1; ++i) {
            val = val * 10 + d_max;
        }
        candidates.push_back(val);
    }

    int min_non_zero = -1;
    for (int x : d) {
        if (x > 0) {
            min_non_zero = x;
            break;
        }
    }
    if (min_non_zero != -1) {
        unsigned long long val = min_non_zero;
        for (int i = 0; i < L; ++i) {
            val = val * 10 + d_min;
        }
        candidates.push_back(val);
    }

    unsigned long long cur = 0;
    for (int i = 0; i < L; ++i) {
        int digit = a[i] - '0';

        int smaller = -1;
        for (int x : d) {
            if (x < digit) smaller = x;
        }
        if (smaller != -1) {
            unsigned long long val = cur * 10 + smaller;
            for (int j = i + 1; j < L; ++j) {
                val = val * 10 + d_max;
            }
            candidates.push_back(val);
        }

        int larger = -1;
        for (int x : d) {
            if (x > digit) {
                larger = x;
                break;
            }
        }
        if (larger != -1) {
            unsigned long long val = cur * 10 + larger;
            for (int j = i + 1; j < L; ++j) {
                val = val * 10 + d_min;
            }
            candidates.push_back(val);
        }

        bool found = false;
        for (int x : d) {
            if (x == digit) {
                found = true;
                break;
            }
        }
        
        if (found) {
            cur = cur * 10 + digit;
            if (i == L - 1) {
                candidates.push_back(cur);
            }
        } else {
            break; 
        }
    }

    unsigned long long target = stoull(a);
    unsigned long long min_diff = -1; 

    for (unsigned long long c : candidates) {
        unsigned long long diff = (target > c) ? (target - c) : (c - target);
        if (diff < min_diff) {
            min_diff = diff;
        }
    }

    cout << min_diff << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int t;
    if (cin >> t) {
        while (t--) {
            solve();
        }
    }
    return 0;
}