#include<atcoder/modint>#include<bits/stdc++.h>usingnamespaceatcoder;usingnamespacestd;usingmint=modint998244353;constintgreen='#';constintred='.';vector<int>dx={0,0,1,-1};vector<int>dy={1,-1,0,0};classGraph{public:vector<string>mat;vector<vector<int>>cc;vector<vector<bool>>vis;introw,col;Graph(vector<string>&mat){this->row=mat.size();this->col=mat[0].length();this->mat=mat;cc.resize(row,vector<int>(col,0));vis.resize(row,vector<bool>(col,false));}public:boolvalid(intx,inty){if(x<0||x>=row||y<0||y>=col){returnfalse;}returntrue;}voiddfs(intx,inty,intcc_id){if(!valid(x,y)||mat[x][y]==red||vis[x][y]){return;}vis[x][y]=true;cc[x][y]=cc_id;for(intdir=0;dir<4;dir++){dfs(x+dx[dir],y+dy[dir],cc_id);}}};intsolve(vector<string>&mat){introw=mat.size();intcol=mat[0].length();Graphg(mat);intcc_id=0;for(inti=0;i<row;i++){for(intj=0;j<col;j++){if(mat[i][j]==green&&!g.vis[i][j]){cc_id++;g.dfs(i,j,cc_id);}}}inttotal_cc=cc_id;intred_count=0;mintans=0;for(inti=0;i<row;i++){for(intj=0;j<col;j++){if(mat[i][j]==green){continue;}set<int>adj_cc_count;for(intdir=0;dir<4;dir++){intx=i+dx[dir];inty=j+dy[dir];if(g.valid(x,y)&&mat[x][y]==green){adj_cc_count.insert(g.cc[x][y]);}}// Combine all adjacent connected components into a single one.
intcontrib=total_cc-(int)adj_cc_count.size();contrib+=1;ans+=contrib;red_count+=1;}}ans/=red_count;returnans.val();}intmain(){introw,col;cin>>row>>col;vector<string>mat;for(inti=0;i<row;i++){stringstr;cin>>str;mat.push_back(str);}cout<<solve(mat)<<"\n";}