#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55;
int dp[MAXN][MAXN][MAXN][MAXN];

int main() {
    int t;
    cin >> t;
    while (t--) {
        string a, b;
        cin >> a >> b;
        memset(dp, 0, sizeof(dp));
        int maxn = 0;
        const int n = a.size(), m = b.size();

        // 提前初始化所有 Alen + Blen <= 1 的情况
        // 情况1:Alen=0, Blen=0(空字符串)
        for (int i = 0; i <= n; i++) {
            for (int j = 0; j <= m; j++) {
                dp[i][i][j][j] = 1;  // 空字符串是回文
                maxn = max(maxn, 0); // 更新最大长度
            }
        }

        // 情况2:Alen=1, Blen=0(A中取1字符)
        for (int i = 0; i < n; i++) { // i范围[0,n-1]
            for (int j = 0; j <= m; j++) {
                dp[i][i + 1][j][j] = 1; // 子串a[i..i]
                maxn = max(maxn, 1);
            }
        }

        // 情况3:Alen=0, Blen=1(B中取1字符)
        for (int j = 0; j < m; j++) { // j范围[0,m-1]
            for (int i = 0; i <= n; i++) {
                dp[i][i][j][j + 1] = 1; // 子串b[j..j]
                maxn = max(maxn, 1);
            }
        }

        // 主循环处理 Alen + Blen >= 2 的情况
        for (int Alen = 0; Alen <= n; Alen++) {
            for (int Blen = 0; Blen <= m; Blen++) {
                if (Alen + Blen < 2) continue; // 跳过已初始化的情况

                for (int i = 0; i + Alen <= n; i++) {
                    int endA = i + Alen;
                    for (int j = 0; j + Blen <= m; j++) {
                        int endB = j + Blen;

                        // 状态转移(无需再判断 Alen+Blen<=1)
                        if (Alen >= 2 && a[i] == a[endA - 1])
                            dp[i][endA][j][endB] = max(dp[i][endA][j][endB],
                                                       dp[i + 1][endA - 1][j][endB]);

                        if (Blen >= 2 && b[j] == b[endB - 1])
                            dp[i][endA][j][endB] = max(dp[i][endA][j][endB],
                                                       dp[i][endA][j + 1][endB - 1]);

                        if (Alen >= 1 && Blen >= 1 && a[i] == b[endB - 1])
                            dp[i][endA][j][endB] = max(dp[i][endA][j][endB],
                                                       dp[i + 1][endA][j][endB - 1]);

                        if (Alen >= 1 && Blen >= 1 && a[endA - 1] == b[j])
                            dp[i][endA][j][endB] = max(dp[i][endA][j][endB],
                                                       dp[i][endA - 1][j + 1][endB]);

                        if (dp[i][endA][j][endB])
                            maxn = max(maxn, Alen + Blen);
                    }
                }
            }
        }
        cout << maxn << endl;
    }
    return 0;
}