Problem:
Score : 100 points

Problem Statement

On the Planet AtCoder, there are four types of bases: A, C, G and T. A bonds with T, and C bonds with G.

You are given a letter b as input, which is A, C, G or T. Write a program that prints the letter representing the base that bonds with the base b.

Constraints

b is one of the letters A, C, G and T.

Input

Input is given from Standard Input in the following format:

b

Output

Print the letter representing the base that bonds with the base b.

Sample Input 1

A

Sample Output 1

T

Sample Input 2

G

Sample Output 2

C

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::{BufRead, StdinLock};
use std::str::FromStr;

fn read<T: FromStr>(stdin_lock: &mut StdinLock, buf: &mut Vec<u8>, delimiter: u8) -> T {
    buf.clear();
    let l = stdin_lock.read_until(delimiter, buf).unwrap();
    buf.truncate(l - 1); // remove delimiter
    let s = unsafe { std::str::from_utf8_unchecked(&buf) };
    s.parse().unwrap_or_else(|_| panic!("read"))
}

fn main() {
    let stdin = std::io::stdin();
    let mut stdin_lock = stdin.lock();
    let mut buf: Vec<u8> = Vec::new();
    let b = read(&mut stdin_lock, &mut buf, b'\n');
    println!("{}", solve(b));
}

fn solve(a: String) -> &'static str {
    match a.as_str() {
        "A" => "T",
        "C" => "G",
        "G" => "C",
        "T" => "A",
        _ => panic!("invalid")
    }
}

#[test]
fn example1() {
    assert_eq!("T", solve("A".to_owned()))
}

#[test]
fn example2() {
    assert_eq!("C", solve("G".to_owned()))
}