atcoder#AGC003F. [AGC003F] Fraction of Fractal

[AGC003F] Fraction of Fractal

配点 : 17001700

問題文

高橋君はお母さんからグリッドをもらいました。このグリッドは縦 HH マス×横 WW マスからなり、各マスは黒か白で塗られています。 黒いマス全体は、縦横にひとつながりになっています。

このグリッドの iijj(1iH,1jW)(1 \leq i \leq H, 1 \leq j \leq W) のマスの情報は、縦横に並んだ文字 sijs_{ij} であらわされ、 sijs_{ij}# のときこのマスが黒く、 . のとき白く塗られていることを表します。少なくともひとつのマスが黒く塗られています。

レベル 00 のフラクタルとは黒いマスひとつからなる 1×11 \times 1 のグリッドであり、 レベル k+1k+1 のフラクタルとは、レベル kk のフラクタルを、お母さんからもらったグリッドの全ての黒いマスに相当する位置に並べ、白いマスに相当する位置は白いマスで埋めたものを指します。

お母さんからもらったグリッドの情報と整数 KK が与えられるので、レベル KK のフラクタルに黒いマスからなる連結成分がいくつあるかを 109+710^9+7 で割ったあまりを求めてください。

制約

  • 1H,W10001 \leq H,W \leq 1000
  • 0K10180 \leq K \leq 10^{18}
  • sijs_{ij}#. のいずれかである。
  • # のマス全体は縦横に連結である。
  • # のマスは少なくともひとつ存在する。

入力

入力は以下の形式で標準入力から与えられる。

HH WW KK

s11..s1Ws_{11} .. s_{1W}

:

sH1..sHWs_{H1} .. s_{HW}

出力

レベル KK のフラクタルにある黒いマスからなる連結成分の個数を 109+710^9+7 で割ったあまりを一行に出力せよ。

3 3 3
.#.
###
#.#
20

この入力例で作られるフラクタルは、以下のようなものです。この黒マスからなる連結成分の数は 2020 なので、2020 を出力します。

.............#.............
............###............
............#.#............
..........#..#..#..........
.........#########.........
.........#.##.##.#.........
..........#.....#..........
.........###...###.........
.........#.#...#.#.........
....#........#........#....
...###......###......###...
...#.#......#.#......#.#...
.#..#..#..#..#..#..#..#..#.
###########################
#.##.##.##.##.##.##.##.##.#
.#.....#..#.....#..#.....#.
###...######...######...###
#.#...#.##.#...#.##.#...#.#
....#.................#....
...###...............###...
...#.#...............#.#...
.#..#..#...........#..#..#.
#########.........#########
#.##.##.#.........#.##.##.#
.#.....#...........#.....#.
###...###.........###...###
#.#...#.#.........#.#...#.#
3 3 3
###
#.#
###
1
11 15 1000000000000000000
.....#.........
....###........
....####.......
...######......
...#######.....
..##.###.##....
..##########...
.###.....####..
.####...######.
###############
#.##..##..##..#
301811921