#include using namespace std; #ifdef _MSC_VER #include #endif using ll = long long; using ld = long double; using ull = unsigned long long; using P = pair; #define endl "\n" #define rep1(i, n) for (ll i = 0; i < (ll)(n); i++) #define rep2(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++) #define OVERLOAD_REP(_1, _2, _3, name, ...) name #define rep(...) OVERLOAD_REP(__VA_ARGS__, rep2, rep1)(__VA_ARGS__) #define rrep(i, n) for (ll i = (ll)(n) - 1; i >= 0; i--) #define all(s) (s).begin(), (s).end() #define fi first #define se second const ll mod = 998244353; const ll inf = 4000000000000000000ll; const ld eps = ld(0.00000000001); static const long double pi = 3.141592653589793; templatevoid vcin(vector &n){for(int i=0;i>n[i];} templatevoid vcin(vector &n,vector &m){for(int i=0;i>n[i]>>m[i];} templatevoid vcout(vector &n){for(int i=0;ivoid vcin(vector> &n){for(int i=0;i>n[i][j];}}} templatevoid vcout(vector> &n){for(int i=0;ivoid print(pair a){cout<auto min(const T& a){ return *min_element(all(a)); } templateauto max(const T& a){ return *max_element(all(a)); } templatebool chmax(T &a,const U b) { if (abool chmin(T &a,const U b) { if (b void ifmin(T t,T u){if(t>u){cout<<-1< void ifmax(T t,T u){if(t>u){cout<<-1< using V = vector; template using VV = V>; template using VVV = V>>; template auto mvec(T val, ll n) { return V(n, val); } template auto mvec(T val, ll n, Args... args) { return V(n, mvec(val, args...)); } vector divisor(ll x){ vector ans; for(ll i = 1; i * i <= x; i++){ if(x % i == 0) {ans.push_back(i); if(i*i!=x){ ans.push_back(x / i);}}}sort(all(ans)); return ans; } ll pop(ll x){return __builtin_popcountll(x);} ll poplong(ll x){ll y=-1;while(x){x/=2;y++;}return y;} void cincout(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); cout<< fixed << setprecision(15); } //============================================================================ // main //============================================================================ int main(){ cincout(); ll h,w; cin>>h>>w; V s(h); V

a; rep(i,h){ cin>>s[i]; } rep(i,h){ rep(j,w){ P aa; aa.fi=-1,aa.se=-1; bool can=true; if(s[i][j]=='#') continue; {//縦のカギ if(i!=0){ if(s[i-1][j]=='.') can=false; } if(i==h-1) can=false; else if(s[i+1][j]=='#') can=false; if(can) aa.fi=i,aa.se=j; } can=true; {//横のカギ if(j!=0){ if(s[i][j-1]=='.') can=false; } if(j==w-1) can=false; else if(s[i][j+1]=='#') can=false; if(can) aa.fi=i,aa.se=j; } if(aa.fi!=-1) a.push_back(aa); } } ll n=a.size(); bool can=true; rep(i,n){ string t,u; cin>>t>>u; rep(j,t.size()){ if(t[0]=='-') break; else if(a[i].se+j>=w){ can=false; break; } else if(s[a[i].fi][a[i].se+j]==t[j]) continue; else if(s[a[i].fi][a[i].se+j]=='.') s[a[i].fi][a[i].se+j]=t[j]; else{ can=false; break; } } if(a[i].se+t.size()=h){ can=false; break; } else if(s[a[i].fi+j][a[i].se]==u[j]) continue; else if(s[a[i].fi+j][a[i].se]=='.') s[a[i].fi+j][a[i].se]=u[j]; else{ can=false; break; } } if(a[i].fi+u.size()