Problem:
Score : 100 points

Problem Statement

You are given a 4-character string S consisting of uppercase English letters.
Determine if S consists of exactly two kinds of characters which both appear twice in S.

Constraints

The length of S is 4.

S consists of uppercase English letters.

Input

Input is given from Standard Input in the following format:

S

Output

If S consists of exactly two kinds of characters which both appear twice in S, print Yes; otherwise, print No.

Sample Input 1

ASSA

Sample Output 1

Yes

S consists of A and S which both appear twice in S.

Sample Input 2

STOP

Sample Output 2

No

Sample Input 3

FFEE

Sample Output 3

Yes

Sample Input 4

FREE

Sample Output 4

No

Solution in OCaml (4.02.3) (judge verdict: Accepted)

let inp : unit -> string = fun () -> 
  input_line stdin

  
let () =
  let s = inp () in
  let rec count n l =
    if n = 4 then
      l
    else
      if List.mem s.[n] l then
        count (n + 1) l
      else
        count (n + 1) (s.[n] :: l)
  in
  let c = List.length (count 0 []) in
  let n =
    let rec f n m =
          if n = 4 then
            m
          else
            if s.[n] = s.[0] then
              f (n + 1) (m + 1)
            else
              f (n + 1) m in
    f 0 0
  in
  if c = 2 && n = 2 then
    print_endline "Yes"
  else
    print_endline "No"