#include using namespace std; typedef long long ll; typedef pair P; struct Block { int id, pos; int num[3]; Block(int id, int pos) : id(id), pos(pos) { for(int i = 0; i < 3; i++) { num[i] = 0; } } }; bool comp1(Block b1, Block b2) { return b1.pos < b2.pos; } bool comp2(Block b1, Block b2) { return b1.id < b2.id; } int num[10000]; vector

p[10000]; int main() { cin.tie(0); ios::sync_with_stdio(false); int H, W, N; cin >> H >> W >> N; for(int i = 0; i < H; i++) { for(int j = 0; j < W; j++) { char c; cin >> c; if(c == '#') num[j]++; } } vector block; for(int i = 0; i < N; i++) { int pos; cin >> pos; block.push_back(Block(i, pos)); } sort(block.begin(), block.end(), comp1); for(int i = 0; i < N; i++) { for(int j = 0; j < 3; j++) { p[block[i].pos + j].push_back(P(i, j)); } } for(auto& b : block) { bool flag = false; for(int i = 0; i < 3; i++) { if(num[b.pos + i] > 0) { num[b.pos + i]--; b.num[i]++; flag = true; break; } } assert(flag); } for(int j = 0; j < W; j++) { if(num[j] == 0) continue; for(auto v : p[j]) { int idx = v.first, col = v.second; while(block[idx].num[col] < 3 && num[j] > 0) { block[idx].num[col]++; num[j]--; } } assert(num[j] == 0); } sort(block.begin(), block.end(), comp2); for(auto b : block) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { if(i >= 3 - b.num[j]) cout << '#'; else cout << '.'; } cout << endl; } } }