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. QT实现输入框与下拉框提示并可模糊匹配

    功能:支持下拉框选择.手动输入更改和模糊匹配 组件:QLineEdit.QComboBox.QCompleter.QStringListModel 一.组件介绍 1.1 QLineEdit QLine ...

  2. 中心化-ESB

    服务调用者与服务提供者通过企业服务总线相连接: ESB成为瓶颈:无论在性能上还是成本消耗上,ESB都会导致瓶颈出现.

  3. 项目管理之Git

    @[TOC]( Git命令:分支与合并)Git一款很好的项目版本管理工具,更是一款优秀的分布式项目管理工具.今天主要给大家介绍Git 强大的分支和合并功能,分支和合并可以说在实际的工作当中用到的是最多 ...

  4. 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法

    powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...

  5. Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现

    下面随笔将给出Hi3559AV100 NNIE RFCN开发:V4L2->VDEC->VPSS->NNIE->VGS->VO系统整体动态调试实现,最终的效果是:USB摄像 ...

  6. python分离不同后缀名的文件

    功能描述 根据文件后缀名处理文件,分别拷贝到对应的文件夹下 example >>> .jpg 后缀 和.mp4 后缀文件处理 代码实现 #!/usr/bin/env python # ...

  7. LNMP配置——Nginx配置 ——域名重定向

    一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入: server { listen 80; server_name test.com test ...

  8. 翻译:《实用的Python编程》05_00_Overview

    目录 | 上一节 (4 类和对象) | 下一节 (6 生成器) 5. Python 对象的内部工作原理 本节介绍 Python 对象的内部工作原理.来自其它语言的程序员通常会发现 Python 的类概 ...

  9. 【docker】删除docker中的运行日志

    docker inspect --format='{{.LogPath}}' 容器名称 |sudo  xargs -i rm {}

  10. golang 实现距离幂算法

    func main() { var test []Pow var x1 Pow x1.distance = 110 x1.grade = 0.31 var x2 Pow x2.distance = 8 ...