#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
 
 
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::boolalpha;
using std::pair;
 
unsigned int binToUInt(const std::string& str)
{
	unsigned int val = 0;
	for (int i = 0; i < (int)str.size(); ++i) {
		switch (str[i]) {
		case '0':
			val *= 2;
			break;
		case '1':
			val = val * 2 + 1;
			break;
		}
	}
	return val;
}
 
bool hpCheck(string _dat, string _eo)
{
	int n = 0;
 
	if (_eo == "odd")
	{
		for (auto i : _dat)
		{
			if (i == '1')n++;
		}
		if (n % 2 == 1)return true;
		else return false;
	}
	else if (_eo == "even")
	{
		for (auto i : _dat)
		{
			if (i == '1')n++;
		}
		if (n % 2 == 0)return true;
		return false;
	}
	else
	{
		return false;
	}
}
 
bool vpCheck(int _n, string _vp, vector<string> _dat, string _eo)
{
	string stmp = "";
	int n = 0;
 
	for (auto s : _dat)
	{
		if (s[_n] == '1')n++;
		//stmp = stmp + s[_n];
	}
	//stmp = stmp + _vp[_n];
	if (_vp[_n] == '1')n++;
 
	if (_eo == "odd")
	{
		if (n % 2 == 1)return true;
		else return false;
	}
	else if (_eo == "even")
	{
		if (n % 2 == 0)return true;
		return false;
	}
	else
	{
		return false;
	}
}
 
int main()
{
	int n;
	cin >> n;
	vector<string> barray;
	string entmp, hp, vp;
	cin >> entmp;
 
	if (entmp != "odd" && entmp != "even") {
		cout << "Error" << endl;
		return 0;
	}
 
	for (int i = 0; i < n; i++) {
		string tmp;
		cin >> tmp;
		barray.push_back(tmp);
	}
	cin >> vp;
 
	pair<int, int> index(-1, -1); //水平、垂直 列、行
 
	//cout << "水平パリティチェック" << endl;
	for (int i = 0; i < barray.size(); i++)
	{
		//cout << boolalpha << hpCheck(barray[i], entmp) << endl;
		//cout << binToUInt(n) << endl;
		if (hpCheck(barray[i], entmp) == false)
			index.first = i;
	}
	//cout << "垂直パリティチェック" << endl;
	for (int i = 0; i < vp.length() - 1; i++)
	{
		//cout << boolalpha << vpCheck(i, vp, barray, entmp) << endl;
		if (vpCheck(i, vp, barray, entmp) == false)
		{
			index.second = i;
		}
	}
 
	if (index == std::make_pair(-1, -1)) {
		for (int i = 0; i < barray.size(); i++) {
			barray[i].erase(barray[i].size() - 1);
			cout << binToUInt(barray[i]) << endl;
		}
	}
	else
	{
		for (int i = 0; i < barray.size(); i++) {
			if (barray[index.first][index.second] == '1') barray[index.first][index.second] = '0';
			else barray[index.first][index.second] = '1';
			barray[i].erase(barray[i].size() - 1);
			cout << binToUInt(barray[i]) << endl;
		}
	}
	//cout << index.first << ", " << index.second << endl;
}