use std::io::{self, Write}; fn out(a: &[bool], k: usize) { for i in k - 1..a.len() { print!("{}", if a[i] { 1 } else { 0 }); } println!(); } fn to_bitarray(s: &str, s_arr: &mut Vec, k: usize, full_n: usize) { for i in 0..k - 1 { s_arr[i] = true; } for i in k - 1..full_n { s_arr[i] = s.chars().nth(i - k + 1).unwrap() == '1'; } } fn min_find(s: &str, n: usize, full_n: usize) -> usize { let weight_min = (n + 1) / 2; let mut change = 0; let mut h_weight = 0; let mut s_arr = vec![false; full_n]; let mut k_arr = vec![false; full_n]; to_bitarray(s, &mut s_arr, weight_min, full_n); k_arr.copy_from_slice(&s_arr); for i in 0..n { h_weight += if s_arr[i] { 1 } else { 0 }; } if h_weight < weight_min { s_arr[n - 1] = true; h_weight += 1; change += 1; } for i in 1..=full_n - n { h_weight -= if s_arr[i - 1] { 1 } else { 0 }; h_weight += if s_arr[i + n - 1] { 1 } else { 0 }; if h_weight < weight_min { s_arr[i + n - 1] = true; h_weight += 1; change += 1; } } change } fn main() { let mut input = String::new(); io::stdout().flush().unwrap(); io::stdin().read_line(&mut input).unwrap(); let n: usize = input.trim().parse().unwrap(); let mut s = String::new(); io::stdin().read_line(&mut s).unwrap(); println!("{}", min_find(&s.trim(), n, 3)); }