#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; class union_find{ int n; vector p; public: union_find(int n):n(n),p(n,-1){} int find(int u){ return p[u]<0?u:p[u]=find(p[u]); } void unite(int u,int v){ u=find(u); v=find(v); if(u!=v){ if(p[v] color(h*w); rep(i,h) rep(j,w) scanf("%d",&color[i*w+j]); vector> G(h*w); rep(u,h*w){ int y=u/w,x=u%w; if(y+1 To=G[u]; for(int v:To) connect(u,v); } rep(i,h) rep(j,w) printf("%d%c",color[U.find(i*w+j)],j