Problem: Nezzar designs a brand new game "Hidden Permutations" and shares it with his best friend, Nanako.

At the beginning of the game, Nanako and Nezzar both know integers n and m. The game goes in the following way:

  * Firstly, Nezzar hides two permutations p_1,p_2,…,p_n and q_1,q_2,…,q_n of integers from 1 to n, and Nanako secretly selects m unordered pairs (l_1,r_1),(l_2,r_2),…,(l_m,r_m); 
  * After that, Nanako sends his chosen pairs to Nezzar; 
  * On receiving those m unordered pairs, Nezzar checks if there exists 1 ≤ i ≤ m, such that (p_{l_i}-p_{r_i}) and (q_{l_i}-q_{r_i}) have different signs. If so, Nezzar instantly loses the game and gets a score of -1. Otherwise, the score Nezzar gets is equal to the number of indices 1 ≤ i ≤ n such that p_i ≠ q_i. 



However, Nezzar accidentally knows Nanako's unordered pairs and decides to take advantage of them. Please help Nezzar find out two permutations p and q such that the score is maximized.

Input

The first line contains a single integer t (1 ≤ t ≤ 5 ⋅ 10^5) — the number of test cases.

The first line of each test case contains two integers n,m (1 ≤ n ≤ 5 ⋅ 10^5, 0 ≤ m ≤ min((n(n-1))/(2),5 ⋅ 10^5)). 

Then m lines follow, i-th of them contains two integers l_i,r_i (1 ≤ l_i,r_i ≤ n, l_i ≠ r_i), describing the i-th unordered pair Nanako chooses. It is guaranteed that all m unordered pairs are distinct.

It is guaranteed that the sum of n for all test cases does not exceed 5 ⋅ 10^5, and the sum of m for all test cases does not exceed 5⋅ 10^5.

Output

For each test case, print two permutations p_1,p_2,…,p_n and q_1,q_2,…,q_n such that the score Nezzar gets is maximized.

Example

Input


3
4 2
1 2
3 4
6 4
1 2
1 3
3 5
3 6
2 1
1 2


Output


1 2 3 4
3 4 1 2
2 3 4 1 6 5
1 4 3 2 5 6
1 2
1 2

Note

For first test case, for each pair given by Nanako:

  * for the first pair (1,2): p_1 - p_2 = 1 - 2 = -1, q_1 - q_2 = 3 - 4 = -1, they have the same sign; 
  * for the second pair (3,4): p_3 - p_4 = 3 - 4 = -1, q_3 - q_4 = 1 - 2 = -1, they have the same sign. 



As Nezzar does not lose instantly, Nezzar gains the score of 4 as p_i ≠ q_i for all 1 ≤ i ≤ 4. Obviously, it is the maximum possible score Nezzar can get.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>

#define endl '\n'
#define fi first
#define se second
#define MOD(n,k) ( ( ((n) % (k)) + (k) ) % (k))
#define forn(i,n) for (int i = 0; i < int(n); i++)
#define forr(i,a,b) for (int i = a; i <= b; i++)
#define all(v) v.begin(), v.end()
#define pb push_back

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;

const int MX = 500005;
int n, m, p[MX], q[MX], d[MX], cn;
vvi res;
set<int> adj[MX], ex;
set<ii> dg;

void clear () {
	cn = 1;
	ex.clear();
	dg.clear();
	res.clear();
	for (int i = 1; i <= n; i++) {
		adj[i].clear();
		ex.insert(i);
	}
}

bool dfs (int u) {
	vi g = {u};
	ex.erase(u);
	
	int v = 0;
	while (1) {
		auto it = ex.upper_bound(v);
		if (it == ex.end()) break;
		v = *it;
		
		if (adj[u].count(v)) continue;
		
		if (!dfs(v)) g.pb(v);
	};
	
	if (g.size() > 1) {
		res.pb(g);
		return 1;
	}
	
	return 0;
}

void solve () {
	cin >> n >> m;
	clear();
	
	forn (i, m) {
		int l, r;
		cin >> l >> r;
		adj[l].insert(r);
		adj[r].insert(l);
	}
	
	for (int i = 1; i <= n; i++)
		dg.emplace(d[i] = adj[i].size(), i);
	
	while (dg.size() && dg.rbegin()->fi == (int)dg.size() - 1) {
		int u = dg.rbegin()->se;
		dg.erase(ii(d[u], u));
		ex.erase(u);
		
		for (int v : adj[u])
			if (ex.count(v)) {
				dg.erase(ii(d[v], v));
				d[v]--;
				dg.emplace(ii(d[v], v));
			}
		
		p[u] = q[u] = cn++; 
	}
	
	while (ex.size()) {
		int u = *ex.begin();
		if (!dfs(u)) 
			res.back().pb(u);
	}
	
	for (vi &g : res) {
		int k = g.size();
		
		forn (i, k) {
			p[g[i]] = cn + i;
			q[g[i]] = cn + (i - 1 + k) % k;
		}
		
		cn += k;
	}
	 
	for (int i = 1; i <= n; i++)
		cout << p[i] << " ";
	cout << endl;
	
	for (int i = 1; i <= n; i++)
		cout << q[i] << " ";
	cout << endl;
}

int main () {
	ios_base::sync_with_stdio(0); cin.tie(0);
	
	int t;
	cin >> t;
	while (t--)
		solve();
			
	return 0;
}