use std::{io, str::SplitAsciiWhitespace};
pub fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read input");
let mut substringiter = input.split_ascii_whitespace();
let height = parse(&mut substringiter);
let width = parse(&mut substringiter);
let mut grid: Vec<Vec<u8>> = vec!();
let rowtext = ".".repeat(width);
for _rownum in 0..height {
grid.push(rowtext.as_bytes().to_vec());
}
let pointamount = parse(&mut substringiter);
let mut previouspoint = (0, 0);
let mut firstpoint = (0, 0);
let mut point = (0,0);
for index in 0..(pointamount+1) {
if index != pointamount {
point = get_point();
} else {
point = firstpoint;
}
grid[point.0][point.1] = 42;
if index != 0 {
let dy = point.0 as isize - previouspoint.0 as isize;
let dx = point.1 as isize - previouspoint.1 as isize;
if dx == 0 {
let rangey = range(previouspoint.0, point.0);
for rownum in rangey {
grid[rownum][point.1] = 124;
}
} else {
let kulmakerroin = dy/dx;
let character: u8 = match kulmakerroin {
1 => 92,
0 => 61,
-1 => 47,
_ => 0,
};
let rangex = range(previouspoint.1, point.1);
for column in rangex {
let y = (previouspoint.0 as isize +(column as isize -previouspoint.1 as isize)*kulmakerroin) as usize;
grid[y][column] = character;
}
}
} else {
firstpoint = point;
}
previouspoint = point;
}
printresult(&grid);
}
pub fn parse(iter: &mut SplitAsciiWhitespace) -> usize {
let s = match iter.next() {
Some(s) => s.parse().unwrap(),
None => 0,
};
return s;
}
pub fn range(previouspointcoord: usize, pointcoord: usize) -> std::ops::Range<usize> {
let range: std::ops::Range<usize> = match pointcoord > previouspointcoord {
true => (previouspointcoord+1)..pointcoord,
false => (pointcoord+1)..previouspointcoord,
};
return range;
}
pub fn get_point() -> (usize, usize) {
let mut point = String::new();
io::stdin().read_line(&mut point).expect("Failed to read input");
let mut pointiter = point.split_ascii_whitespace();
let y = parse(&mut pointiter)-1;
let x = parse(&mut pointiter)-1;
let output = (y, x);
return output;
}
pub fn printresult(grid: &Vec<Vec<u8>>) {
let mut stringgrid: Vec<&str> = vec!();
for row in grid {
let charrow = &row[..];
let s = match str::from_utf8(charrow) {
Ok(v) => v,
Err(_e) => panic!(),
};
stringgrid.push(s);
}
for row in stringgrid {
println!("{}", row);
}
}