The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cell is either land or water. The map is surrounded by the ocean.

Lakes are the maximal regions of water cells, connected by sides, which are not connected with the ocean. Formally, lake is a set of water cells, such that it's possible to get from any cell of the set to any other without leaving the set and moving only to cells adjacent by the side, none of them is located on the border of the rectangle, and it's impossible to add one more water cell to the set such that it will be connected with any other cell.

You task is to fill up with the earth the minimum number of water cells so that there will be exactly klakes in Berland. Note that the initial number of lakes on the map is not less than k.

Input

The first line of the input contains three integers nm and k (1 ≤ n, m ≤ 50, 0 ≤ k ≤ 50) — the sizes of the map and the number of lakes which should be left on the map.

The next n lines contain m characters each — the description of the map. Each of the characters is either '.' (it means that the corresponding cell is water) or '*' (it means that the corresponding cell is land).

It is guaranteed that the map contain at least k lakes.

Output

In the first line print the minimum number of cells which should be transformed from water to land.

In the next n lines print m symbols — the map after the changes. The format must strictly follow the format of the map in the input data (there is no need to print the size of the map). If there are several answers, print any of them.

It is guaranteed that the answer exists on the given data.

Example

Input
5 4 1
****
*..*
****
**.*
..**
Output
1
****
*..*
****
****
..**
Input
3 3 0
***
*.*
***
Output
1
***
***
***

Note

In the first example there are only two lakes — the first consists of the cells (2, 2) and (2, 3), the second consists of the cell (4, 3). It is profitable to cover the second lake because it is smaller. Pay attention that the area of water in the lower left corner is not a lake because this area share a border with the ocean.

 1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <cstring>
5 #include <map>
6 using namespace std;
7 typedef long long ll;
8 const int N=55;
9 inline int read(){
10 char c=getchar();int x=0,f=1;
11 while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
12 while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
13 return x*f;
14 }
15 int n,m,k;
16 char g[N][N];
17 int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
18 int vis[N][N],num[N*N],cc=0;
19 struct lakes{
20 int size,id;
21 }lake[N*N];
22 int cnt=0;
23 bool cmp(lakes &a,lakes &b){
24 return a.size<b.size;
25 }
26 void dfs(int x,int y,int id){//printf("dfs %d %d %d\n",x,y,id);
27 vis[x][y]=id;num[id]++;
28 for(int i=0;i<4;i++){
29 int nx=x+dx[i],ny=y+dy[i];
30 if(nx<1||nx>n||ny<1||ny>m) continue;
31 if(g[nx][ny]=='*'||vis[nx][ny]) continue;
32 dfs(nx,ny,id);
33 }
34 }
35 int ans=0;
36 void fil(int x,int y,int id){//printf("fil %d %d %d\n",x,y,id);
37 g[x][y]='*';ans++;
38 for(int i=0;i<4;i++){
39 int nx=x+dx[i],ny=y+dy[i];
40 if(nx<1||nx>n||ny<1||ny>m) continue;
41 if(vis[nx][ny]==id&&g[nx][ny]=='.') fil(nx,ny,id);
42 }
43 }
44 int main(){
45 n=read();m=read();k=read();
46 for(int i=1;i<=n;i++){
47 scanf("%s",g[i]);
48 for(int j=m;j>=1;j--) g[i][j]=g[i][j-1];
49 }
50
51 for(int i=1;i<=n;i++){
52 if(!vis[i][1]&&g[i][1]=='.') dfs(i,1,++cc);
53 if(!vis[i][m]&&g[i][m]=='.') dfs(i,m,++cc);
54 }
55 for(int j=1;j<=m;j++){
56 if(!vis[1][j]&&g[1][j]=='.') dfs(1,j,++cc);
57 if(!vis[n][j]&&g[n][j]=='.') dfs(n,j,++cc);
58 }
59 int sea=cc;
60 for(int i=1;i<=n;i++)
61 for(int j=1;j<=m;j++){
62 if(!vis[i][j]&&g[i][j]=='.')
63 dfs(i,j,++cc);
64 }
65 for(int i=sea+1;i<=cc;i++) {lake[++cnt].size=num[i];lake[cnt].id=i;}//printf("%d %d\n",sea,cc);
66 sort(lake+1,lake+1+cnt,cmp);
67 //for(int i=1;i<=cnt;i++) printf("lake %d %d\n",lake[i].id,lake[i].size);
68 int t=cnt-k,p=1;//printf("t %d\n",t);
69 for(int z=1;z<=t;z++){
70 int fin=0;
71 for(int i=1;i<=n;i++){
72 for(int j=1;j<=m;j++)
73 if(lake[p].id==vis[i][j]){fil(i,j,lake[p++].id);fin=1;break;}
74 if(fin) break;
75 }
76 }
77 printf("%d\n",ans);
78 for(int i=1;i<=n;i++){
79 for(int j=1;j<=m;j++) printf("%c",g[i][j]);
80 if(i!=n) putchar('\n');
81 }
82
83 }

F - Lakes in Berland(BFS)的更多相关文章

  1. 【29.70%】【codeforces 723D】Lakes in Berland

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. codeforce375div2-D. Lakes in Berland 搜索

    Lakes in Berland 题意与解释:这道题就是求图中被围起来的点群,问最少去掉几个点,可以使得孤立的点群数目为K; 因为自己写的代码又长又had bugs. 我自己写的bfs,想着是先染色, ...

  3. CF723D. Lakes in Berland[DFS floodfill]

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. codeforces 723D: Lakes in Berland

    Description The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × ...

  5. CF723D 【Lakes in Berland】

    题目链接 题解 CF723D [Lakes in Berland] 首先将边界的水用bfs处理掉 再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点 将湖泊排序从小往大填满, ...

  6. cf723d Lakes in Berland

    The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cel ...

  7. Codeforces Round #375 (Div. 2)——D. Lakes in Berland(DFS连通块)

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. Codeforces Round #375 (Div. 2) D. Lakes in Berland dfs

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. codeforces723 D. Lakes in Berland(并查集)

    题目链接:codeforces723 D. Lakes in Berland 参考博客:http://www.cnblogs.com/Geek-xiyang/p/5930245.html #inclu ...

随机推荐

  1. 顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐

     深入理解字节,字节序与字节对齐 一 总述 作为一个职业的coder玩家,首先应该对计算机的字节有所了解. 我们经常谈到的2进制流,字节(字符)流,数据类型流(针对编程),结构流等说法,2进制流,0和 ...

  2. 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)

    1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...

  3. 记录mysql查询数据遇到的一个小问题

    今天在测试的时候,需要使用mysql对插入的数据进行检验,但是写完查询语句的时候执行会报错.原因很简单,这个表名是order(订单),在MySQL语言中order是用来排序的关键字,原则上讲是不能作为 ...

  4. Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes

    题目链接:http://codeforces.com/gym/100923/problem/L 分析:题目要求序列首尾相同,在此基础上的字典序第k个:因为只存在a,b所以我们把它等效成0和1的话,字典 ...

  5. JS动态获取select中被选中的option的值,并在控制台输出

    生活城市: <select id="province"> <option>河南省</option> <option>黑龙江省< ...

  6. 如何快速的插入 100W数据到数据库,使用PreparedStatement 最快实现!

    有时候,我们使用数据库的时候,如何快速的添加测试数据到数据库中,做测试呢,添加100W 数据,如果使用工具的话可能很慢,这里我推荐大家使用 PreparedStatement 预编译 去进行操作:单线 ...

  7. python 查看模块中的方法

    way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembe ...

  8. springboot源码解析-管中窥豹系列之BeanPostProcessor(十二)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  9. java例题_49 计算子串出现的次数

    1 /*49 [程序 49 子串出现的个数] 2 题目:计算字符串中子串出现的次数 3 */ 4 5 /*分析 6 * 1.子串的出现是有标志的,如" ",*,#或者其他 7 * ...

  10. INTERSPEECH2020 语音情感分析论文之我见

    摘要:本文为大家带来InterSpeech2020 语音情感分析25篇论文中的其中8篇的总结. 本文分享自华为云社区<INTERSPEECH2020 语音情感分析论文总结一>,原文作者:T ...