The numbers 1,   2,   ...,   n ⋅ k are colored with n colors. These colors are indexed by 1,   2,   ...,   n. For each 1 ≤ i ≤ n, there are exactly k numbers colored with color i.

Let [a,   b] denote the interval of integers between a and b inclusive, that is, the set \\{a,   a + 1,   ...,   b\}. You must choose n intervals [a_1,   b_1],   [a_2,   b_2],   ..., [a_n,   b_n] such that: 

  * for each 1 ≤ i ≤ n, it holds 1 ≤ a_i < b_i ≤ n ⋅ k; 
  * for each 1 ≤ i ≤ n, the numbers a_i and b_i are colored with color i; 
  * each number 1 ≤ x ≤ n ⋅ k belongs to at most \left⌈ (n)/(k - 1) \right⌉ intervals. 



One can show that such a family of intervals always exists under the given constraints.

Input

The first line contains two integers n and k (1 ≤ n ≤ 100, 2 ≤ k ≤ 100) — the number of colors and the number of occurrences of each color.

The second line contains n ⋅ k integers c_1,   c_2,   ...,   c_{nk} (1 ≤ c_j ≤ n), where c_j is the color of number j. It is guaranteed that, for each 1 ≤ i ≤ n, it holds c_j = i for exactly k distinct indices j.

Output

Output n lines. The i-th line should contain the two integers a_i and b_i.

If there are multiple valid choices of the intervals, output any.

Examples

Input


4 3
2 4 3 1 1 4 2 3 2 1 3 4


Output


4 5
1 7
8 11
6 12

Input


1 2
1 1


Output


1 2


Input


3 3
3 1 2 3 2 1 2 1 3


Output


6 8
3 7
1 4

Input


2 3
2 1 1 1 2 2


Output


2 3
5 6

Note

In the first sample, each number can be contained in at most \left⌈ (4)/(3 - 1) \right⌉ = 2 intervals. The output is described by the following picture:

<image>

In the second sample, the only interval to be chosen is forced to be [1,   2], and each number is indeed contained in at most \left⌈ (1)/(2 - 1) \right⌉ = 1 interval.

In the third sample, each number can be contained in at most \left⌈ (3)/(3 - 1) \right⌉ = 2 intervals. The output is described by the following picture:

<image>
//Author: OptimalKnight
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional>
#include <chrono>

using namespace std;
using namespace __gnu_pbds;
using namespace chrono;

#pragma GCC optimize("Ofast")
#pragma GCC target("fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#pragma GCC optimize("unroll-loops")

#define ios ios_base::sync_with_stdio(false);cin.tie(NULL);

#define max3(a,b,c) max(max((a),(b)),(c))
#define max4(a,b,c,d) max(max((a),(b)),max((c),(d)))
#define min3(a,b,c) min(min((a),(b)),(c))
#define min4(a,b,c,d) min(min((a),(b)),min((c),(d)))

#define ll long long int
//#define fo(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define fo(i,a,b) for(ll i=(a); i<(b); i++)
#define endl "\n"
#define pb push_back
#define mp make_pair
//#define lb lower_bound
//#define up upper_bound
#define all(V) V.begin(),V.end()

#define d0(x) cout<<(x)<<" "
#define d1(x) cout<<(x)<<endl
#define d2(x,y) cout<<(x)<<" "<<(y)<<endl
#define ye(x) ((x)==0)?(cout<<"YES"<<endl):(cout<<"Yes"<<endl)
#define no(x) ((x)==0)?(cout<<"NO"<<endl):(cout<<"No"<<endl)
#define take(x) for(auto &y:x) cin>>y
#define show(x) for(auto y:x) cout<<y<<" "; cout<<endl

mt19937_64 gen(chrono::steady_clock::now().time_since_epoch().count());
//uniform_int_distribution<long long int> dis(L,R);
//dis(gen): Produces uniformly distributed integer values on the closed interval [L,R]
//dis.reset(): Resets the distribution
template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
//find_by_order(K): Returns an iterator to the Kth largest element(counting from zero)
//order_of_key(K): Returns the number of items that are strictly smaller than K

//const long double pi=3.14159265358979323846264338;
//const long long INF=1000000000000000000;
//const long long IINF=1000000000;
//const long long int MOD=1000000007;
//const long long int MOD=998244353;
//Template Ends
ll _cl(ll A,ll B){
	if(A%B)
		return A/B + 1;
	return A/B;
}
int main(){
	ios
	#ifndef ONLINE_JUDGE
	freopen("INPUT.txt", "r", stdin);
	freopen("OUTPUT.txt", "w", stdout);
	#endif
	ll Tests=1;
	// cin>>Tests;
	while(Tests--){
		ll N,K;
		cin>>N>>K;
		ll th=_cl(N,K-1);
		vector<ll> vis(N+1,0),last(N+1,0),A(N+1),B(N+1);
		ll done=0;
		fo(i,1,N*K+1){
			ll x;cin>>x;
			if(vis[x]!=0){
				continue;
			}
			if(last[x]==0){
				last[x]=i;
			}
			else{
				A[x]=last[x];
				B[x]=i;
				vis[x]=1;
				done++;
				if(done==th){
					done=0;
					fo(i,1,N+1){
						last[i]=0;
					}
				}
			}
		}
		fo(i,0,A.size())
			d2(A[i],B[i]);
	}
}