Problem:
Score : 700 points

Problem Statement

Given is a sequence of N digits a_1a_2\ldots a_N, where each element is 1, 2, or 3.
Let x_{i,j} defined as follows:

x_{1,j} := a_j \quad (1 \leq j \leq N)

x_{i,j} := | x_{i-1,j} - x_{i-1,j+1} | \quad (2 \leq i \leq N and 1 \leq j \leq N+1-i)

Find x_{N,1}.

Constraints

2 \leq N \leq 10^6

a_i = 1,2,3 (1 \leq i \leq N)

Input

Input is given from Standard Input in the following format:

N
a_1a_2\ldotsa_N

Output

Print x_{N,1}.

Sample Input 1

4
1231

Sample Output 1

1

x_{1,1},x_{1,2},x_{1,3},x_{1,4} are respectively 1,2,3,1.

x_{2,1},x_{2,2},x_{2,3} are respectively |1-2| = 1,|2-3| = 1,|3-1| = 2.

x_{3,1},x_{3,2} are respectively |1-1| = 0,|1-2| = 1.

Finally, x_{4,1} = |0-1| = 1, so the answer is 1.

Sample Input 2

10
2311312312

Sample Output 2

0

Solution in Rust (1.15.1) (judge verdict: Wrong Answer)

macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
    ($($r:tt)*) => {
        let s = {
            use std::io::Read;
            let mut s = String::new();
            std::io::stdin().read_to_string(&mut s).unwrap();
            s
        };
        let mut iter = s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
}

macro_rules! input_inner {
    ($iter:expr) => {};
    ($iter:expr, ) => {};

    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($iter, $t);
        input_inner!{$iter $($r)*}
    };
}

macro_rules! read_value {
    ($iter:expr, ( $($t:tt),* )) => {
        ( $(read_value!($iter, $t)),* )
    };

    ($iter:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()
    };

    ($iter:expr, chars) => {
        read_value!($iter, String).chars().collect::<Vec<char>>()
    };

    ($iter:expr, usize1) => {
        read_value!($iter, usize) - 1
    };

    ($iter:expr, $t:ty) => {
        $iter.next().unwrap().parse::<$t>().expect("Parse error")
    };
}

fn naive(a: &mut [i32]) -> i32 {
    let n = a.len();
    for h in 0..n {
        for x in 0..n - h - 1 {
            a[x] = (a[x] - a[x + 1]).abs();
        }
    }
    a[0]
}

fn main() {
    input!{
        n: usize,
        aa: chars,
    };
    let mut one = 0;
    let mut two = 0;
    for c in aa {
        match c {
            '1' => (),
            '2' => {
                one += 1;
            },
            '3' => {
                two += 1;
            },
            _ => unreachable!(),
        }
    }
    if one == 0 {
        if two % 2 == 0 {
            println!("0");
        } else {
            println!("2");
        }
    } else {
        if one == 1 {
            println!("1");
        } else {
            println!("0");
        }
    }

    // for i in 2..10 {
    //     let mut a = vec![1; i];
    //     println!("{} {}", i, naive(&mut a));
    // }


    // for i in 0..3i32.pow(n as u32) {
    //     let mut a = Vec::with_capacity(n);
    //     let mut i = i;
    //     for _ in 0..n {
    //         a.push(i % 3);
    //         i /= 3;
    //     }
    //     print!("{:?}", a);
    //     let b = naive(&mut a);
    //     println!(" {}", b);
    // }
}