#include <iostream>
using namespace std;
const int maxn_1= 500010;
const int maxn_2=100010;
int _left[maxn_1],_right[maxn_1];
void link (int a, int b) {
_right[a] = b;
_left[b] = a;
}
int main() {
int t;
cin>>t;
while (t--) {
int n,m;
cin>>n>>m;
for (int i=0;i<=n;i++) link(i,i+1);
for (int i=0;i<m;i++) {
int op,a,b;
cin>>op>>a>>b;
link(_left[a],_right[a]);
if (op==1) {
link(_left[b],a);//先b左,以免丢失
link(a,b);
} else {
link(a,_right[b]);//先b右以免丢失
link(b,a);
}
}
for (int i=_right[0];i<=n;i=_right[i]) {
cout<<i<<" ";
}
cout<<endl;
}
}
用数组模拟链表是在这种oj中非常实用的一个技巧,如果知道数组的下标也就是链表储存的值的话就可以直接通过,数组得到相应的操作,而不用像链表那样一次一次去迭代。而可采用这种方法的情况,一般是链表中的的值是整形才行。而且下标必须是不重复的才行,否则很容易导致链表中断!