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)

use std::io::*;
fn read(s: &mut StdinLock, num: usize) -> Vec<u32> {
    (0..num).map(|_| 
        s.by_ref().bytes().map(|c| c.unwrap() as char)
            .take_while(|c| !c.is_whitespace())
            .skip_while(|c| c.is_whitespace())
            .fold(0, |a, x| (x as u8 - b'0') as u32 + a * 10)
    ).collect()
}

fn read_line(s: &mut StdinLock) -> Vec<usize> {
    s.by_ref().bytes().map(|c| c.unwrap() as char)
        .take_while(|c| !c.is_whitespace())
        .skip_while(|c| c.is_whitespace())
        .map(|c| (c as u8 - b'0') as usize)
        .collect()
}
fn main() {
    let s = stdin();
    let mut s = s.lock();
    let mut n: usize = read(&mut s, 1)[0] as usize;
    let mut a: Vec<usize> = read_line(&mut s);
    let mut sp = false;
    if !a.contains(&2) && a.contains(&1) && a.contains(&3) {
        sp = true;
    }
    loop {
        let take: usize = 2usize.pow(format!("{:0$b}", n).trim().len() as u32 - 1);
        for i in 0..n-take+1 {
            let mut tmp = a.split_at(i).1.to_owned();
            tmp.split_off(take);
            a.push(tmp.iter().filter(|x| *x%2==1).count() % 2);
        }
        a = a.split_off(n);
        n = n - take + 1;
        if n == 1 {
            break;
        }
    }
    if sp && a[0] == 0 {
        println!("2");
    } else {
        println!("{}", a[0]);
    }
}