直接用list
#include<bits/stdc++.h>
using namespace std;
const int maxn=150005;
void read(int &x){
char ch = getchar();x = 0;
for (; ch < '0' || ch > '9'; ch = getchar());
for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}
int main()
{
int n,q;
while(~scanf("%d",&n))
{
list<int>s[n+1];
read(q);
for(int i=1;i<=n;i++)
{
s[i].clear();
}
int k,u,v,w,val;
for(int i=0;i<q;i++)
{
read(k);
if(k==1)
{
read(u);read(w);read(val);
if(w==0)
{
s[u].push_front(val);
}
else
{
s[u].push_back(val);
}
}
else if(k==2)
{
read(u);read(w);
if(s[u].empty())
{
printf("-1\n");
continue;
}
if(w==0)
{
printf("%d\n",s[u].front());
s[u].pop_front();
}
else
{
printf("%d\n",s[u].back());
s[u].pop_back();
}
}
else
{
read(u);read(v);read(w);
if(w==0)
{
s[u].splice(s[u].end(),s[v]);
}
else
{
reverse(s[v].begin(),s[v].end());
s[u].splice(s[u].end(),s[v]);
}
s[v].clear();
}
}
}
return 0;
}