#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <ctime>

#define forr(a,b,c) for(int a = b; a < c; ++ a)
#define fore(a,b,c) for(int a = b; a <= c; ++ a)

#define inb(r,c) (0<=r&&r<h&&0<=c&&c<w)

#define pii pair<int,int>
#define int3 pair<pair<int,int>, int>
#define vi vector<int>
#define vs vector<string>

//#define DEBUG

using namespace std;

int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};

int main(){
	
	#ifndef DEBUG
		freopen("DATA5.txt", "r", stdin);
		freopen("OUT5.txt", "w", stdout);
	#endif
	
		int w, h;
		char grid[20][20];
		cin >> h >> w;
		
		pii entrance[26], exit[26], interest[5];
		
		forr(i,0,26){
			entrance[i] = exit[i] = make_pair(-1,-1);
		}
		
		forr(i,0,h){
			forr(j,0,w){
				cin >> grid[i][j];
				if(isalpha(grid[i][j])){
					if('a' <= grid[i][j] && grid[i][j] <= 'z'){
						entrance[grid[i][j]-'a'] = make_pair(i,j);
					}
					else exit[grid[i][j]-'A'] = make_pair(i,j);
				}
				else if('1' <= grid[i][j] && grid[i][j] <= '9'){
					interest[grid[i][j]-'1'] = make_pair(i,j);
				}
			}
		}
		
	forr(i,0,5){
		bool explored[20][20];
		memset(explored,0,sizeof(explored));
		
		queue<pii> q;
		q.push(interest[i]);
		
		while(!q.empty()){
			pii c = q.front();
			q.pop();
			explored[c.first][c.second] = true;
			//cout << c.first << ' ' <<  c.second << '\n';
			
				forr(j,0,4){
					pii cc = make_pair(c.first+dir[j][0], c.second+dir[j][1]);
					
					if(inb(cc.first, cc.second) && grid[cc.first][cc.second] != '#'
					&& !explored[cc.first][cc.second]){
						if('a' <= grid[cc.first][cc.second] && grid[cc.first][cc.second] <= 'z'){
							if(!explored[exit[grid[cc.first][cc.second]-'a'].first][exit[grid[cc.first][cc.second]-'a'].second]) q.push(exit[grid[cc.first][cc.second]-'a']);
						}
						q.push(cc);
					}
					
				}
		}
		
		bool colon = true;
		cout << (i+1);
		
		for(int j=0; j<5; ++j){
			if(i==j) continue;
			if(explored[interest[j].first][interest[j].second]){
				if(colon) cout << ":";
				else cout << " ";
				cout << (j+1);
				colon = false;
			}
		}
		
		if(colon) cout << ":";
		
		cout << '\n';
	}
		
	
	#ifdef DEBUG
		system("pause");
	#endif
	
	return 0;
}

