#include #include #include using namespace std; char mapa[40][40]; int n,m; typedef map < char , int> mapa_slova; typedef map < char, mapa_slova > mapa_dometa; mapa_dometa domet; mapa_dometa::iterator d_it; mapa_slova::iterator s_it; bool brojka(char x) { return ( x >= '0' && x <= '9' ); } bool slovo(char x) { return ( x >= 'a' && x <= 'z' ); } bool zid(char x) { return x == '#'; } int prikupi(char bomba,char znak) { if (slovo(znak)) domet[bomba][znak] = 1; return !(zid(znak)); } void explodiraj(int y,int x) { char znak, bomba = mapa[y][x]; int i,j; i = y; // lijevo for (j = x-1 ; j >= 0; j--) if (!prikupi(bomba,mapa[i][j])) break; // desno for (j = x+1 ; j <= m-1; j++) if (!prikupi(bomba,mapa[i][j])) break; j = x; // gore for (i = y-1 ; i >= 0; i--) if (!prikupi(bomba,mapa[i][j])) break; // dolje for (i = y+1 ; i <= n-1; i++) if (!prikupi(bomba,mapa[i][j])) break; } int main() { cin >> n >> m; for (int i = 0; i < n; i++) cin >> mapa[i]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++ ) { if (brojka(mapa[i][j])) explodiraj(i,j); } } mapa_slova ms; for (d_it = domet.begin(); d_it!=domet.end(); d_it++) { cout << d_it->first << ": " ; ms = domet[d_it->first]; for (s_it = ms.begin(); s_it!=ms.end(); s_it++) { cout << s_it->first; } cout << endl; } return 0; }