#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 1e3 + 10;
string x = "..##";
string y = ".#.#";
class AbstactSolver
{
public:
	virtual void outputGuess() = 0;
	virtual void getResult() = 0;
	virtual void outputFinalResult() = 0;
	void solve()
	{
		string s1, s2;
		cin >> n;
		int len = 0;
		int flag = 1;
		char c;
		while (1)
		{
			if (s1.length() == n) break;
			if (flag)
			{
				int key = -1;
				for (int i = 0; i < 4; i++)
				{
					gx = s1 + x[i];
					gy = s2 + y[i];
					outputGuess();
					getResult();
					c = response[0];
					if (c == 'T')
					{
						key = i;
						break;
					}
				}
				if (key == -1) flag = 0;
				else
				{
					s1 = gx;
					s2 = gy;
				}
			}
			else
			{
				int key = -1;
				for (int i = 0; i < 4; i++)
				{
					gx = x[i] + s1;
					gy = y[i] + s2;
					outputGuess();
					getResult();
					c = response[0];
					if (c == 'T')
					{
						key = i;
						break;
					}
				}
				if (key == -1) break;
				s1 = gx;
				s2 = gy;
			}
		}
		// 这里输出最后认为正确的猜测
		gx = s1;
		gy = s2;
		outputFinalResult();
	}
public:
	string gx, gy; // 
	char response[10]; // 反馈的结果
	int n;
};

// LocalSolve用于解决本地调试的情况
class LocalSolver : public AbstactSolver
{
public:
	string cx, cy; // 这里是提供给我们要猜的数字
	int guessCount; // 记录猜测次数
	LL pre;
public:
	LocalSolver()
	{
		guessCount = 0;
		// 这里放入正确的结果，也就是我们要去猜的数
		cx = "#.";
		cy = "#.";
	}
	void outputGuess()
	{
		// 这里之前已经把要猜测的东西保存下来了，只记录猜测次数
		printf("the %d round, you guess the number is: %s %s\n", ++guessCount, gx.c_str(), gy.c_str());
	}


	void getResult()
	{
		// 这里写本地调试器，不要在意细节
		int k = gx.length();
		response[0] = 'F';
		for (int i = 0; i + k <= n; i++)
		{
			if (gx == cx.substr(i, k) && gy == cy.substr(i, k)) response[0] = 'T';
		}
		printf("the %d round, the feedback is:\n%c\n\n", guessCount, response);
	}

	bool isGuessCorrect()
	{
		return gx == cx &&
			gy == cy;
	}
	void outputFinalResult()
	{

		printf("\nYou guess the number is: %s %s\n,", gx.c_str(), gy.c_str());
		printf("The correct Number is: %s %s\n", cx.c_str(), cy.c_str());
		printf("your guess is %s\n", isGuessCorrect() ? "TRUE" : "FALSE");
		printf("total guess count is: %d\n", guessCount);
	}

};

class RemoteSolver : public AbstactSolver
{
public:
	void outputGuess()
	{
		printf("%s\n%s\n", gx.c_str(), gy.c_str());
		fflush(stdout);
	}
	void getResult()
	{
		scanf("%s", response);
	}
	void outputFinalResult()
	{
		printf("%s\n%s\n", gx.c_str(), gy.c_str());
		fflush(stdout);
	}
};
int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	//#ifdef ONLINE
	RemoteSolver solver;
	//#else
	//	LocalSolver solver;
	//#endif

	solver.solve();
	return 0;
}

Measured memory_bytes: 596