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. 安装node环境以及cnpm

    其实我老早以前就发现 node 版本太高也不行 以往的版本下载地址: https://nodejs.org/zh-cn/download/releases/ 下载并解压到 /usr/local/ 下 ...

  2. 后端程序员之路 37、Akka、Actor、Scala初窥

    Akkahttp://akka.io/ Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用,是一个广泛运用的分布式应用框架. ...

  3. 不使用map和set实现LRU——那用List?

    遇到一道面试题,不使用map和set实现LRU,要求get的时间复杂度为O(logn),put的时间复杂度不超过O(n).想到了用ArrayList来实现,保存有序的key.然而牵涉add节点,在保证 ...

  4. calcite 概念和架构

    1. 前言 Flink使用Calcite构造SQL引擎,那么他们 是怎么合作的? drill, hive,storm 和其他的一干apache 大数据引擎也用calcite , 那么对于同一个sql  ...

  5. 你真的搞懂了Java中的<<、>>、>>>运算符嘛?

    在搞懂<<.>>.>>>之前,我们需要先了解二进制中的源码.反码.补码... 二进制中的原码.反码.补码 有符号数: 对于有符号数而言,符号的正.负机器是无法 ...

  6. mybatis&plus系列------Mysql的JSON字段的读取和转换

    mybatis&plus系列------Mysql的JSON字段的读取和转换 一. 背景 在平常的开发中,我们可能会有这样的需求: 业务数据在存储的时候,并不是以mysql中的varchar丶 ...

  7. Java标识符,关键字,保留字三者区分(主要是从官网摘抄)

    区分 标识符(Identifiers) An identifier is an unlimited-length sequence of Java letters and Java digits, t ...

  8. 关于Java中Collections.sort和Arrays.sort的稳定性问题

    一 问题的提出   关于Java中Collections.sort和Arrays.sort的使用,需要注意的是,在本文中,比较的只有Collections.sort(List<T> ele ...

  9. python 画图中文显示问题

    在python文件当前目录下添加simsun.ttc(资源网上下载即可,有很多) 代码如下: plt.title("标题", fontproperties='SimHei', si ...

  10. 自然语言处理(NLP)知识结构总结

    自然语言处理知识太庞大了,网上也都是一些零零散散的知识,比如单独讲某些模型,也没有来龙去脉,学习起来较为困难,于是我自己总结了一份知识体系结构,不足之处,欢迎指正.内容来源主要参考黄志洪老师的自然语言 ...