A

そのまま。

a.hs
```import Data.List

main = do
str <- getLine
putStrLn \$ if elem str \$ permutations "abc" then "Yes" else "No"
```

と思ったら条件より以下の方が適切でした。

a.hs
```import Data.List

main = do
str <- getLine
putStrLn \$ if nub str == str then "Yes" else "No"

```

B

そのまま。

b.hs
```import Data.List

solve :: Int -> Int -> Int -> [Int]
solve a b k =
if b-a+1 > 2*k then [a..a+k-1] ++ [(b-k+1)..b]
else [a..b]

main = do
[a,b,k] <- map read . words <\$> getLine :: IO [Int]
mapM print (solve a b k)
```

C

case部分が汚いが一応通る。もう少しスマートに書きたい。

c.hs
```import Data.List

solve :: Int -> Int -> Int -> Int
solve a b c =
(div (z - x) 2) + (div (z - y) 2) +
case ((z - x) `mod` 2) + ((z - y) `mod`2) of
0 -> 0
1 -> 2
2 -> 1
where
[x,y,z] = sort [a,b,c]

main = do
[a,b,c] <- map read . words <\$> getLine :: IO [Int]
print \$ solve a b c
```

D

これで動かないことも知ってるしそもそもTLE...
あとで書き直します。

d.hs
```import Control.Monad
import Data.List

solve :: [[Int]] -> [Int]
solve [] = []
solve ([a,b]:qs) =
e : solve qs
where
maxInt = 10^10^10
e = length  [(x,y) | x<-[1..(max a b)],y<-[1..(max a b)],x/=a&&y/=b&&x*y<a*b]

main = do
q <- read <\$> getLine ::IO Int
ql <- replicateM q \$ map read . words <\$> getLine ::IO [[Int]]
mapM print \$ solve ql
```