#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

vector<char> put1, put2;
vector<bool> sus;
char line[200];

int readBroj(ifstream &file)
{
	int broj;
	char c = ' ';
	while ((file.peek() != -1) && ((c < '0') || (c > '9')))
		c = file.get();
	if ((c >= '0') && (c <= '9'))
	{
		file.putback(c);
		file >> broj;
		return broj;
	}
	else
		return -1;
}

char readChar(ifstream &file)
{
	int broj;
	char c = ' ';
	while ((file.peek() != -1) && ((c < 'a') || (c > 'z')))
		c = file.get();
	return c;
}

void ucitavanje(ifstream &inFile)
{
	int i, N, M;
	char ch;
	
	inFile >> N >> M;

	do
	{
		inFile >> ch;
	} while ((ch < 'a') || (ch > 'z'));

		put2.push_back(ch);	

	for (i = 0; i < N - 1; i++)
	{
		inFile >> ch;
		put2.push_back(ch);
	}

	do
	{
		inFile >> ch;
	} while ((ch < 'a') || (ch > 'z'));

	put1.push_back(ch);
	sus.push_back(true);

	for (i = 0; i < M - 1; i++)
	{
		inFile >> ch;
		put1.push_back(ch);
		sus.push_back(true);
	}
}

//int main() {
int main(int argc, char *argv[]) {
    bool ispravno = true;
	int i, isp, kod, poz, kKom, kTak;
    char c;
	ifstream inp(argv[1]);
  ifstream tak(argv[2]);
  ifstream kom(argv[3]);
//	ifstream inp("planete.05.in");
//	ifstream tak("planete.tak05.out");
//	ifstream kom("planete.05.out");

	ucitavanje(inp);
	
	kom.getline(line, 100);
	if (tak.peek() != -1)
		tak.getline(line, 100);
	else
		ispravno = false;

	if (ispravno)
	{
		kom >> kKom;
		kTak = readBroj(tak);
		if (kKom != kTak)
			ispravno = false;
	}

	if (ispravno)
	{
		isp = 0;
		while (ispravno && (isp < kKom))
		{
			kod = readBroj(tak);
			poz = readBroj(tak);
			switch (kod)
			{
				case 1 :
					c = readChar(tak);
					if ((poz >= 1) && (poz <= put1.size()) && (c >= 'a') && (c <= 'z'))
						put1[poz - 1] = c;
					else
						ispravno = false;
					break;

				case 2 :
					c = readChar(tak);
					if ((poz >= 1) && (poz <= put1.size() + 1) && (c >= 'a') && (c <= 'z'))
					{
						if (poz == put1.size() + 1)
						{
							put1.push_back(c);
							sus[sus.size() - 1] = false;
							sus.push_back(false);
						}
						else
						{
							put1.push_back('a');
							sus.push_back(false);
							for (i = put1.size() - 1; i >= poz; i--)
							{
								put1[i] = put1[i - 1];
								sus[i] = sus[i - 1];
							}
							put1[poz - 1] = c;
							sus[poz - 1] = false;
							if (poz > 1)
								sus[poz - 2] = false;
						}
					}
					else
						ispravno = false;
					break;

				case 3 :
					if ((poz >= 1) && (poz <= put1.size()))
					{
						for (i = poz; i < put1.size(); i++)
						{
							put1[i - 1] = put1[i];
							sus[i - 1] = sus[i];
						}

						put1.pop_back();
						sus.pop_back();

						if (poz > 1)
							sus[poz - 2] = false;
					}
					else
						ispravno = false;
					break;

				case 4 :
					if ((poz >= 1) && (poz < put1.size()) && (sus[poz - 1] == true))
					{
						c = put1[poz - 1];
						put1[poz - 1] = put1[poz];
						put1[poz] = c;
						sus[poz] = false;
						sus[poz - 1] = true;
						if (poz > 1)
							sus[poz - 2] = false;
					}
					else
						ispravno = false;
					break;

				default:
					ispravno = false;
			}
			
			isp++;
		}
	}

	if (ispravno)
	{
		if (put1.size() != put2.size())
			ispravno = false;

		i = 0;
		while (ispravno && (i < put1.size()))
		{
			if (put1[i] != put2[i])
				ispravno = false;
			i++;
		}
	}

	if (ispravno)
		cout << "10" << endl;
	else
		cout << "0" << endl;
	
	inp.close();
	tak.close();
	kom.close();

	return 0;
}
