/**
  * http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_6_C
  * Array - Official House
  */
object Main {
  def main(args: Array[String]): Unit = {
    val n = io.StdIn.readInt()
    val operations = Iterator.continually(io.StdIn.readLine()).takeWhile(_ != null).take(n).map(_.split(" ").map(_.toInt))
      .map { case Array(b, f, r, v) => (b, f, r, v) }
      .toSeq
    val initialHouse = OfficialHouse((1 to 4).map(Building(_, (1 to 3).map(Floor(_, (1 to 10).map(Room(_, 0)))))))
    val currentHouse = operations.foldLeft(initialHouse) {
      (house, operation) => {
        operation match {
          case (b, f, r, v) =>
            house.inout(b, f, r, v)
        }
      }
    }
    print(currentHouse)
  }

  case class Room(roomNumber: Int, residents: Int) {
    override def toString: String = s" $residents"

    def inout(inoutResidents: Int): Room = {
      Room(roomNumber, residents + inoutResidents)
    }
  }

  case class Floor(floorNumber: Int, rooms: Seq[Room]) {
    override def toString: String = rooms.foldLeft("")(_ + _)

    def inout(roomNumber: Int, inoutResidents: Int): Floor = {
      Floor(floorNumber, rooms.updated(roomNumber - 1, rooms(roomNumber - 1).inout(inoutResidents)))
    }
  }

  case class Building(buildingNumber: Int, floors: Seq[Floor]) {
    override def toString: String = floors.foldLeft("")(_ + _ + "\n")

    def inout(floorNumber: Int, roomNumber: Int, inoutResidents: Int): Building = {
      Building(buildingNumber, floors.updated(floorNumber - 1, floors(floorNumber - 1).inout(roomNumber, inoutResidents)))
    }
  }

  case class OfficialHouse(buildings: Seq[Building]) {
    override def toString: String = buildings.mkString("#" * 20 + "\n")

    def inout(buildingNumber: Int, floorNumber: Int, roomNumber: Int, inoutResidents: Int): OfficialHouse = {
      OfficialHouse(buildings.updated(buildingNumber - 1, buildings(buildingNumber - 1).inout(floorNumber, roomNumber, inoutResidents)))
    }
  }

}