#XMOJ11795. 魔法扫帚飞行大挑战

魔法扫帚飞行大挑战

说明

时间限制:2 Sec 内存限制:64 MB 输入文件broomstick.in 输出文件broomstick.out

魔法学院新开了一门神奇的课程——飞行扫帚课!练习场是一块巨大的「魔法广场」,广场由无数块方格地砖铺成,向东南西北无限延伸。不过,有些地砖被施了「禁飞结界」,扫帚一旦靠近就会被轻轻弹开,所以佳佳在飞行时绝对不敢落到有结界的格子上。

佳佳驾驶着心爱的扫帚,从某一块没有结界的方格起飞,一格一格地向前飞。扫帚每次移动,都恰好越过一条公共边,落到相邻的另一块地砖上。佳佳把每一步的方向都认真地记了下来:L 表示向左一格,R 表示向右一格,U 表示向上一格,D 表示向下一格。她保证自己全程没有撞上结界,但悲催的是——她完全忘了哪些地砖有结界,也忘了自己是从哪块地砖起飞的。

小明决定当一回「结界侦探」:他想知道,是否至少存在一种结界分布方式,使得佳佳记录的这条路线,恰好是起飞点到降落点之间的最短飞行路线(即在避开结界的前提下,移动次数最少的路线)?如果存在,就说明佳佳这次的飞行很完美;如果无论如何都做不到,那佳佳一定偷偷绕了远路。

输入格式

第一行包含一个整数 $T$,表示飞行记录的数量。

接下来 $T$ 行,每行包含一个字符串 $s$,由大写字母 LRUD 组成,表示一次飞行记录。

输出格式

对每组飞行记录输出一行:如果存在结界分布使该路线成为最短路线,输出 OK;否则输出 BUG

样例

样例 1

3
LLUUUR
RRUULLDD
LUR

OK
BUG
BUG

样例说明:

第一组 LLUUUR:先向左两格、再向上三格、最后向右一格,在空中画出一条弯弯的折线。小明在广场上找到了结界的一种摆法,能让这条路线恰好成为最短路线,输出 OK

第二组 RRUULLDD:向右、向上、向左、向下各飞两格,最后又落回了起飞点。既然起飞点就是降落点,那一步都不飞($0$ 步)才是最短路,而佳佳飞了 $8$ 步,这条路线绝不可能是最短路线,输出 BUG

第三组 LUR:向左、向上、向右各飞一格。降落点其实就在起飞点的正上方,直接向上飞一格只要 $1$ 步,比佳佳的 $3$ 步短得多——而且这块地砖是佳佳自己落过的空地,结界挡不住这条捷径——所以这条路线绝不可能是最短路线,输出 BUG

样例 2

2
R
URDL

OK
BUG

样例说明:

第一组 R:只飞一步就降落,一步到位的路线自然是最短路线,输出 OK

第二组 URDL:向上、向右、向下、向左飞了一个小方框,最后又停在了起飞点。起飞点就是降落点,$0$ 步才是最短路线,而佳佳飞了 $4$ 步,这条路线绝不可能是最短路线,输出 BUG

样例 3

2
RURD
LUURRD

BUG
OK

样例说明:

第一组 RURD:向右、向上、向右、向下,绕了一个小拱。降落点其实就在起飞点右边两格,直接向右飞两格(RR)只要 22 步,比佳佳的 44 步短得多——而且这两块地砖都是佳佳自己飞过的空地,结界挡不住这条捷径——所以这条路线绝不可能是最短路线,输出 BUG

第二组 LUURRD:向左一格、向上两格、向右两格、再向下一格,像走台阶一样层层前进。小明很快就在广场上找到了结界的一种摆法,让这条路线成为最短路线,输出 OK

数据范围

令 $T$ 表示测试组数,$|s|$ 表示一组飞行记录的长度。

对于 $50\%$ 的测试点,$1 \le T \le 50$,$1 \le |s| \le 10^2$,所有 $|s|$ 之和不超过 $10^4$。

对于 $100\%$ 的测试点,$1 \le T \le 100$,$1 \le |s| \le 10^3$,所有 $|s|$ 之和不超过 $10^5$。