#include <bits/stdc++.h>
using namespace std;
string longestPalindromicSubstringManchers(string s) {
  string rev = "", str = s;
  int m = s.size(), longestPalindromicPrefix = 1;
  if (m == 0 || m == 1) longestPalindromicPrefix = m;
  for (int i = m - 1; i >= 0; i--) rev += s[i];
  s += '#';
  s += rev;
  int n = s.size(), z[n + 4], l = 0, r = 0;
  for (int i = 1; i < n; i++) {
    if (i > r) {
      l = r = i;
      while (r < n && s[r - l] == s[r]) r++;
      z[i] = r - l, r--;
    } else {
      int k = i - l;
      if (z[k] < r - i + 1)
        z[i] = z[k];
      else {
        l = i;
        while (r < n && s[r - l] == s[r]) r++;
        z[i] = r - l, r--;
      }
    }
  }
  for (int i = m + 1; i < n; i++) {
    if (2 * z[i] >= 2 * m - i && z[i] > longestPalindromicPrefix)
      longestPalindromicPrefix = z[i];
  }
  string abcd;
  for (int i = 0; i < longestPalindromicPrefix; i++) {
    abcd += s[i];
  }
  return abcd;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t;
  cin >> t;
  while (t--) {
    string s;
    cin >> s;
    int start = 0;
    int end = s.length() - 1;
    while (s[start] == s[end] && start < end) {
      start++;
      end--;
    }
    if (start == (end + 1) || start == end) {
      cout << s << "\n";
      continue;
    } else {
      string new_s;
      for (int i = start; i <= end; i++) {
        new_s += s[i];
      }
      string ans_left = longestPalindromicSubstringManchers(new_s);
      reverse(new_s.begin(), new_s.end());
      string ans_right = longestPalindromicSubstringManchers(new_s);
      for (int i = 0; i < start; i++) {
        cout << s[i];
      }
      if (ans_left.length() >= ans_right.length()) {
        cout << ans_left;
      } else {
        cout << ans_right;
      }
      int n = s.length();
      for (int i = (end + 1); i < n; i++) {
        cout << s[i];
      }
      cout << "\n";
    }
  }
  return 0;
}
