模拟,老老实实地将字符串转化成数字运算,再转换成字符串输出.

对于字符串转数字:
1. ”1”(..#) “4”(#.#) “+”(...) 比较特殊,它们的第一行都是没有别的数与其重复的,可以直接特判;
2. 同理,再将“2” “3” 和 “5” “6” 放在一起判断;
3. 再将"7" "0" 和 "8" "9" 放在一起判断(其实都差不多啦).

对于数字转字符串:
老实一行一行输出,如果是最后一个数字就不输出末尾的 '.' .(如果有更好的方法请赐教,勿喷)

代码如下:
#include<bits/stdc++.h>
using namespace std;

int n;
string s[10];

void print(int x) {
	string str;
	while(x) {
		str.push_back((x % 10) + '0');
		x /= 10;
	}
	for(int i = str.length() - 1;i >= 0;i--) {
		switch(str[i] - 48) {
			case 0 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 4 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
			case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 7 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
		}
	}
	printf("\n"); 
	for(int i = str.length() - 1;i >= 0;i--) {
		switch(str[i] - 48) {
			case 0 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
			case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 2 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 3 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 4 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
			case 5 : {if(i == 0) {printf("#.."); break;} printf("#..."); break;}
			case 6 : {if(i == 0) {printf("#.."); break;} printf("#..."); break;}
			case 7 : {if(i == 0) {printf("#.#"); break;} printf("..#."); break;}
			case 8 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
			case 9 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
		}
	}
	printf("\n");
	for(int i = str.length() - 1;i >= 0;i--) {
		switch(str[i] - 48) {
			case 0 : {if(i == 0) {printf("#.#"); break;} printf("#.#."); break;}
			case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 4 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 7 : {if(i == 0) {printf("#.#"); break;} printf("..#."); break;}
			case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
		}
	}
	printf("\n");
	for(int i = str.length() - 1;i >= 0;i--) {
		switch(str[i] - 48) {
			case 0 : {if(i == 0) {printf("#.#"); break;}  printf("#.#."); break;}
			case 1 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
			case 2 : {if(i == 0) {printf("#.."); break;}  printf("#..."); break;}
			case 3 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
			case 4 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
			case 5 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
			case 6 : {if(i == 0) {printf("#.#"); break;}  printf("#.#."); break;}
			case 7 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
			case 8 : {if(i == 0) {printf("#.#"); break;}  printf("#.#."); break;}
			case 9 : {if(i == 0) {printf("..#"); break;}  printf("..#."); break;}
		}
	}
	printf("\n");
	for(int i = str.length() - 1;i >= 0;i--) {
		switch(str[i] - 48) {
			case 0 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 1 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 2 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 3 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 4 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 5 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 6 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 7 : {if(i == 0) {printf("..#"); break;} printf("..#."); break;}
			case 8 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
			case 9 : {if(i == 0) {printf("###"); break;} printf("###."); break;}
		}
	}
	printf("\n\n");
}

int main() {
	scanf("%d",&n);
	for(int i = 1;i <= n;i++) {
		int a = 0,t = 0;
		for(int j = 0;j < 5;j++)
			cin >> s[j];
		for(int j = 0;j < s[0].length();j += 4) {
			if(s[0][j] == '.' && s[0][j+1] == '.' && s[0][j+2] == '.') {
				a += t;
				t = 0;
			}			
			else if(s[0][j] == '.' && s[0][j+2] == '#')
				t = (t << 1) + (t << 3) + 1;
			else if(s[0][j] == '#' && s[0][j+1] == '.' && s[0][j+2] == '#')
				t = (t << 1) + (t << 3) + 4;
			else {
				if(s[1][j] == '.' && s[1][j+2] == '#') {
					if(s[3][j] == '#') 
						t = (t << 1) + (t << 3) + 2;
					else if(s[3][j+2] == '#') 
						t = (t << 1) + (t << 3) + 3;
				}
				else if(s[1][j] == '#' && s[1][j+2] == '.') {
					if(s[3][j] == '#') 
						t = (t << 1) + (t << 3) + 6;
					else t = (t << 1) + (t << 3) + 5;
				}
				else if(s[2][j+1] == '.') {
					if(s[3][j] == '#') 
						t = (t << 1) + (t << 3);
					else t = (t << 1) + (t << 3) + 7;
				}
				else if(s[3][j] == '#')
					t = (t << 1) + (t << 3) + 8;
				else t = (t << 1) + (t << 3) + 9;
			}
		}
		a += t;
		print(a);
		getchar(); getchar();
	}
	return 0;
}