Problem:
Score : 200 points

Problem Statement

You are given a image with a height of H pixels and a width of W pixels.
Each pixel is represented by a lowercase English letter.
The pixel at the i-th row from the top and j-th column from the left is a_{ij}.

Put a box around this image and output the result. The box should consist of # and have a thickness of 1.

Constraints

1 ≤ H, W ≤ 100

a_{ij} is a lowercase English letter.

Input

Input is given from Standard Input in the following format:

H W
a_{11} ... a_{1W}
:
a_{H1} ... a_{HW}

Output

Print the image surrounded by a box that consists of # and has a thickness of 1.

Sample Input 1

2 3
abc
arc

Sample Output 1

#####
#abc#
#arc#
#####

Sample Input 2

1 1
z

Sample Output 2

###
#z#
###

Solution in Rust (1.15.1) (judge verdict: Accepted)


use std::io::*;
use std::str::FromStr;

pub fn read<T: FromStr>() -> T {
  let stdin = stdin();
  let stdin = stdin.lock();
  let token: String = stdin
    .bytes()
    .map(|c| c.expect("failed to read char") as char)
    .skip_while(|c| c.is_whitespace())
    .take_while(|c| !c.is_whitespace())
    .collect();
  token.parse().ok().expect("failed to parse token")
}

use std::cmp::{max, min};
use std::collections::HashMap;

fn main() {
  let h = read::<i64>();
  let w = read::<i64>();
  let mut map: Vec<String> = vec![];

  let mut st = String::from("");
  for i in 0..w + 2 {
    st.push_str("#")
  }

  map.push(st);
  for _ in 0..h {
    let mut row_s = String::from("#");
    let row = read::<String>();
    row_s.push_str(&row);
    row_s.push_str("#");
    map.push(row_s);
  }

  let mut st2 = String::from("");
  for i in 0..w + 2 {
    st2.push_str("#")
  }
  map.push(st2);

  for i in map {
    println!("{}", i);
  }
}