Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910func CF1202C(_r io.Reader, _w io.Writer) {11 in := bufio.NewReader(_r)12 out := bufio.NewWriter(_w)13 defer out.Flush()14 min := func(a, b int) int {15 if a < b {16 return a17 }18 return b19 }20 max := func(a, b int) int {21 if a > b {22 return a23 }24 return b25 }26 type xy struct{ x, y int }27 dir4 := []xy{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}28 dir4c := []xy{29 'A': {-1, 0},30 'D': {1, 0},31 'S': {0, -1},32 'W': {0, 1},33 }34 type pair struct{ miX, mxX, miY, mxY int }35 update := func(p pair, x, y int) pair {36 return pair{37 min(p.miX, x),38 max(p.mxX, x),39 min(p.miY, y),40 max(p.mxY, y),41 }42 }43 44 var T int45 var s []byte46 for Fscan(in, &T); T > 0; T-- {47 Fscan(in, &s)48 n := len(s)49 suf := make([]pair, n+1)50 sufX, sufY := 0, 051 for i := n - 1; i >= 0; i-- {52 d := dir4c[s[i]]53 sufX -= d.x54 sufY -= d.y55 suf[i] = update(suf[i+1], sufX, sufY)56 }57 q := suf[0]58 ans := int64(q.mxX-q.miX+1) * int64(q.mxY-q.miY+1)59 x, y := 0, 060 p := pair{}61 for i, b := range s {62 q := suf[i]63 for _, d := range dir4 {64 x, y := x+d.x, y+d.y65 shiftX, shiftY := x-sufX, y-sufY66 pp := update(p, x, y)67 miX := min(pp.miX, q.miX+shiftX)68 mxX := max(pp.mxX, q.mxX+shiftX)69 miY := min(pp.miY, q.miY+shiftY)70 mxY := max(pp.mxY, q.mxY+shiftY)71 if a := int64(mxX-miX+1) * int64(mxY-miY+1); a < ans {72 ans = a73 }74 }75 d := dir4c[b]76 sufX += d.x77 sufY += d.y78 x += d.x79 y += d.y80 p = update(p, x, y)81 }82 Fprintln(out, ans)83 }84}85 8687