#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
	//vars
	ifstream f ("DATA5.txt");
	ofstream g ("OUT5.txt");
	int a,b,c,d,e,x,best;
	char ch;
	bool piece[4][4][4];
	bool field[16][20];
	bool field2[16][20];
	//testcase loop
		for (int t=0; t<5; t++)	//<--- CHANGE
		{
			//input
				for (a=0; a<4; a++)
					for (b=0; b<4; b++)
					{
						f >> ch;
						piece[0][a][b]=(ch=='#');
						piece[1][b][3-a]=(ch=='#');
						piece[2][3-a][3-b]=(ch=='#');
						piece[3][3-b][a]=(ch=='#');
					}
				for (a=0; a<6; a++)
					for (b=0; b<10; b++)
					{
						f >> ch;
						field[a][b]=(ch=='#');
					}
			//try all possibilities
			best=0;
				for (x=0; x<4; x++)
				for (a=0; a<6; a++)
				{
						for (b=0; b<6; b++)
						{
							for (c=0; c<4; c++)
								if (b+c==6)
								{
									for (d=0; d<4; d++)
										if (piece[x][c][d])
											goto done;
								}
								else
								if (b+c>=0)
									for (d=0; d<4; d++)
										if ((field[b+c][a+d]) && (piece[x][c][d]))
											goto done;
						}
done:
					b--;
					memcpy(field2,field,sizeof(field));
						for (c=0; c<4; c++)
							for (d=0; d<4; d++)
								if (piece[x][c][d])
									field2[b+c][a+d]=true;
					c=0;
						for (d=0; d<6; d++)
						{
								for (e=0; e<10; e++)
									if (!field2[d][e])
										goto skip2;
							c++;
skip2:
							d=d;
						}
						if (c>best)
							best=c;
				}
			//output
			g << best << endl;
			cout << best << endl;
		}
	return(0);
}
