#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
char s[maxn];
struct matrix {
  int x1, y1, x2, y2;
} st[maxn], ed[maxn];
inline int getx(char t) {
  if (t == 'W' || t == 'S') return 0;
  if (t == 'D') return 1;
  return -1;
}
inline int gety(char t) {
  if (t == 'A' || t == 'D') return 0;
  if (t == 'W') return 1;
  return -1;
}
void update(int x, int y, matrix &a) {
  if (x < a.x1) a.x1 = x;
  if (x > a.x2) a.x2 = x;
  if (y < a.y1) a.y1 = y;
  if (y > a.y2) a.y2 = y;
}
matrix move(char t, matrix &a) {
  matrix re = a;
  re.x1 += getx(t), re.x2 += getx(t);
  re.y1 += gety(t), re.y2 += gety(t);
  return re;
}
long long getsize(matrix a, matrix b) {
  long long mnx, mny, mxx, mxy;
  mnx = a.x1 < b.x1 ? a.x1 : b.x1;
  mny = a.y1 < b.y1 ? a.y1 : b.y1;
  mxx = a.x2 > b.x2 ? a.x2 : b.x2;
  mxy = a.y2 > b.y2 ? a.y2 : b.y2;
  return (mxx - mnx + 1) * (mxy - mny + 1);
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%s", s);
    int x = 0, y = 0, n = strlen(s);
    matrix rg = (matrix){0, 0, 0, 0};
    for (int i = 0; i < n; i++) {
      st[i] = rg;
      x += getx(s[i]), y += gety(s[i]);
      update(x, y, rg);
    }
    st[n] = rg;
    rg = (matrix){x, y, x, y};
    ed[n] = rg;
    for (int i = n - 1; i >= 0; i--) {
      x -= getx(s[i]), y -= gety(s[i]);
      update(x, y, rg);
      ed[i] = rg;
    }
    long long ans = 1e18;
    for (int i = 0; i <= n; i++) {
      long long val;
      val = getsize(st[i], move('W', ed[i]));
      if (val < ans) ans = val;
      val = getsize(st[i], move('A', ed[i]));
      if (val < ans) ans = val;
      val = getsize(st[i], move('S', ed[i]));
      if (val < ans) ans = val;
      val = getsize(st[i], move('D', ed[i]));
      if (val < ans) ans = val;
    }
    printf("%lld\n", ans);
  }
  return 0;
}
