use std::io::{self, Read};
use datamatrix::{placement::MatrixMap, DataMatrix};
fn main() {
let mut input = vec![];
io::stdin().read_to_end(&mut input).unwrap();
let width = input
.iter()
.filter(|x| matches!(*x, b'0' | b'1' | b'\n'))
.position(|x| *x == b'\n')
.unwrap();
let pixels = input
.into_iter()
.filter_map(|b| match b {
b'1' => Some(true),
b'0' => Some(false),
_ => None,
})
.collect::<Vec<_>>();
let (matrix_map, size) = MatrixMap::try_from_bits(&pixels, width).unwrap();
let data = DataMatrix::decode(&pixels, width).unwrap();
println!("{}", matrix_map.bitmap().unicode());
println!("Size: {:?}", size);
println!("Content: {:?}", std::str::from_utf8(&data).unwrap());
}