import java.io.*;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input[] = br.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int m = Integer.parseInt(input[1]);
ArrayList<Integer> list = new ArrayList<>();
//1~n명의 사람이 있다고 가정한다. 그래서 미리 순열에 대한 list를 만들어두었다
//중간idx의 삽입-삭제를 할수있는 자료구조를 선택하였다
//삽입,삭제가 많은만큼 연결리스트가 더 효율적이라고 생각은 하지만
//arraylist가 되는지안되는지를 보고싶었다.
//입력 수 제한이 적어서 arraylist로도 가능한것같다
for(int i=1;i<=n;i++){
list.add(i);
}
//m이라는 값은 기억해두어야한다. 하지만 매번 삭제되는 list의 idx는 다를수밖에없다
//그래서 따로 변수를 선언해주었다
int idx = 0;
//m-1을 해주는 이유는 0부터 3번쨰는 2이기때문이다
//예를들어 idx=2가 삭제된 이후에도 +2를 해주어야 3번쨰인 값을 찾을 수 있기에
//-1을 해주었다
m = m-1;
bw.write("<");
while(list.size()>1){
//일단 더해줍니다. while문안에들어있는 과정은 매번 반복될것이니
// 매번 m칸씩 더해주는 코드를 넣고 그에따라 m이나 idx의 값을 설정해주었습니다
//가령 0이나 m-1같은것들이요
idx += m;
//더하기만 하다보면 list.size를 초과할수있습니다. 그러기에
//매번 size보다 작게 나머지연산을 해주었습니다
// 123 을 생각해보면 4가나오면 1로 바꾸어줘야하고 5가 나오면 2로바꾸어줘야합니다
// 456
// 이는 순서와 상관있기때문에 나머지 연산으로 처리해줄 수 있습니다
idx = idx % list.size();
//remove를 하기 전에 값을 저장합니다
int temp = list.get(idx);
list.remove(idx);
bw.write(temp + ", ");
}
bw.write(list.get(0) +">");
bw.flush();
bw.close();
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Main{
//idx과 level두가지 변수르 담기 위해 node라는 class를 정의하였다
public static class Node{
int idx;
int level;
public Node(int idx, int level){
this.idx = idx;
this.level = level;
}
}
public static int func(LinkedList<Node> q , int idx){
int count =0;
int bigIdx = 0;
//q가 비어있다는것은 모두 프린터했다는뜻이다.
//반복은 모두 프린터를 끝날떄까지, 즉 끝까지 반복을 돌린다
while(!q.isEmpty()) {
boolean isBig = false;
//첫번재 원소를 얻는다
Node cur = q.peek();
//가장 level이 큰 원소에 대해 그 원소이전값들은 모두 빼서 뒤에 넣을것이다
//그래서 가장 큰 원소를 기록하는 과정을 담았다
//q.peek = q.get(0)일테니가 1부터 size-1까지 반복한다
//그리고 이런식으로 한다면 1 4 2 3 이라는 순서라고 한다면
//cur이 변화되지않기때문에 4앞인 1만 뒤로 돌려야하는데
//3앞의 모든것을 뒤로 돌리게 돼서 문제가 발생한다
//그래서 cur = q.get(i)코드가 필요하다
for (int i = 1; i < q.size(); i++) {
if (cur.level < q.get(i).level) {
isBig = true;
bigIdx = i;
cur = q.get(i);//이전에는 이 코드를 넣지 않아 문제가 발생했음
}
}
//문제 대로 한다면 4를 출력했을때의 순서는 다음과 같을것이다
//1 3 2 4
//3 2 4 1
//4 1 3 2
//내 로직대로한대도
//4 1 3 2
//가장 큰 값을 찾아서 나머지를 그 큰값뒤에 차례대로 붙여주면되는것이다
if(isBig){
for (int k = 0; k < bigIdx; k++) {
//앞에서 하나빼서 뒤에 붙인다
Node temp = q.poll();
q.add(temp);
}
}
//break문 앞에 count가 위치해야 pop한것의 개수까지셀수있다
count++;
q.pop();
if(q.peek().idx == idx){
break;
}
}
return count;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for(int i=0;i<n;i++){
LinkedList<Node> q = new LinkedList<>();
String input[] = br.readLine().split(" ");
int m = Integer.parseInt(input[0]);
String lev[] = br.readLine().split(" ");
for(int k=0;k<m;k++){
q.add(new Node(k, Integer.parseInt(lev[k])));
}
bw.write(func(q, Integer.parseInt(input[1])) +"\n");
}
bw.flush();
bw.close();
}
}