#include <iostream>
#include <vector>
#include <string>
#include <regex>
using namespace std;

int main() {
    int N; cin >> N;
    string S; cin >> S;
    int Q; cin >> Q;

    string pre = S.substr(0, N);
    string post = S.substr(N);

    for (int i = 0; i < Q; ++i) {
        int t, a, b;
        cin >> t >> a >> b;
        if (t == 1) {
            a--; b--;

            if (b < N) {
                swap(pre[a], pre[b]);
            } else if (N <= a) {
                swap(post[a - N], post[b - N]);
            } else {
                swap(pre[a], post[b - N]);
            }
        } else {
            swap(pre, post);
        }
    }

    cout << pre << post << endl;
}
#include <bits/stdc++.h>
using namespace std;

const int M=18;
const int INF=0x3f3f3f3f;
int x[M],y[M],z[M];
int d[M][M];
inline int dis(int i,int j)
{
	return abs(x[i]-x[j])+abs(y[i]-y[j])+max(0,z[j]-z[i]);
}

int dp[1<<M][M];

int main()
{
	int n; cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>x[i]>>y[i]>>z[i];
	}
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			d[i][j]=dis(i,j);
	for(int k=0;k<n;k++)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
	memset(dp,INF,sizeof(dp));
	int mask=1<<n;
	dp[1][0]=0;
	for(int s=1;s<mask-1;s++)
	{
		for(int j=0;j<n;j++)
		{
			if(dp[s][j]==INF) continue;
			for(int k=0;k<n;k++)
			{
				if(s&(1<<k)) continue;
				dp[s^(1<<k)][k]=min(dp[s^(1<<k)][k],dp[s][j]+d[j][k]);
			}
		}
	}
	int ans=INF;
	for(int i=1;i<n;i++)
	{
		ans=min(ans,dp[mask-1][i]+d[i][0]);
	}
	printf("%d\n",ans);
	return 0;
}