# 107正式試題
## pA. 計算字數及含有 s 或 S 字母的字數
```python=
for _ in range(int(input())):
n = input().split()
s = sum([1 for i in n if "S" in i or "s" in i])
print(str(len(n))+","+str(s))
```
## pB. 井字棋
```python=
for _ in range(int(input())):
arr = []
for i in range(3):
arr.append(list(input()))
if arr[0].count(arr[0][0]) == 3 and arr[0][0] != '0':
print(arr[0][0])
elif arr[1].count(arr[1][0]) == 3 and arr[1][0] != '0':
print(arr[1][0])
elif arr[2].count(arr[2][0]) == 3 and arr[2][0] != '0':
print(arr[2][0])
elif arr[0][0] == arr[1][0] == arr[2][0] and arr[0][0] != '0':
print(arr[0][0])
elif arr[0][1] == arr[1][1] == arr[2][1] and arr[0][1] != '0':
print(arr[0][1])
elif arr[0][2] == arr[1][2] == arr[2][2] and arr[0][2] != '0':
print(arr[0][2])
elif arr[0][0] == arr[1][1] == arr[2][2] and arr[0][0] != '0':
print(arr[0][0])
elif arr[0][2] == arr[1][1] == arr[2][0] and arr[0][2] != '0':
print(arr[0][2])
else:
print("3")
```
## pC. 快樂數字
```python=
for _ in range(int(input())):
n = input()
seen = set()
while n != "1":
seen.add(n)
ans = 0
for i in n:
ans += int(i)**2
n = str(ans)
if n in seen:
print("F")
break
else:
print("T")
```
## pD. 排列
```python=
def dfs(num, d):
if len(d) == len(num): seen.add(d)
for i in num:
if i not in d:
dfs(num, d+i)
for _ in range(int(input())):
n = input().split(",")
k = int(n[-1])
num = n[1:-1]
seen = set()
dfs(num, "")
print(sorted(seen)[k-1])
```
## pE. 大數乘冪運算
```python=
for _ in range(int(input())):
n, m = [int(i) for i in input().split(",")]
print(len(str(n**m)))
```
## pF. 模數 (Modulo)
```python=
for _ in range(int(input())):
an, am, bn, bm, mn, mm = map(int, input().split())
ans = 0
for a in range(an, am+1):
for b in range(bn, bm+1):
for m in range(mn, mm+1):
if (a+b)%m == (a-b)%m:
ans += 1
print(ans)
```
## pG. 樹 (找 2 節點之間最長路徑的長度)
```python=
from collections import defaultdict, deque
for _ in range(int(input())):
arr = deque(eval(input().replace("null", "0")))
d = defaultdict(list)
root = arr.popleft()
q = deque([root])
while len(arr):
node = q.popleft()
if len(arr):
a = arr.popleft()
if a:
d[node].append(a)
d[a].append(node)
q.append(a)
if len(arr):
a = arr.popleft()
if a:
d[node].append(a)
d[a].append(node)
q.append(a)
vis = [0]*(128)
seen = set()
q = [root]
head = 0
seen.add(root)
while head < len(q):
node = q[head]; head += 1
for i in d[node]:
if i not in seen:
seen.add(i)
q.append(i)
vis[i] = vis[node]+1
root = vis.index(max(vis))
q = [root]
head = 0
seen = set()
vis = [0]*(128)
seen.add(root)
while head < len(q):
node = q[head]; head += 1
for i in d[node]:
if i not in seen:
seen.add(i)
q.append(i)
vis[i] = vis[node]+1
print(max(vis))
```
## pH. 循環排列
找群體
```python=
for _ in range(int(input())):
arr = [0]+eval(input())
ans = []
seen = set()
for i in range(1, len(arr)):
temp = []
now = i
while now not in seen:
seen.add(now)
temp.append(now)
now = arr[now]
if temp != []:
ans.append(temp)
print(ans)
```