import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
/**
* @Description 考点:实现特殊数据结构的能力及特殊算法的设计能力
* 题目:猫狗队列
* 链接:https://www.nowcoder.com/practice/8a7e04cff6a54b7095b94261d78108f5?tpId=101&tqId=33168&tPage=1&rp=1&ru=/ta/programmer-code-interview-guide&qru=/ta/programmer-code-interview-guide/question-ranking
* <p>
* 思路:用两个队列来分别存放猫狗元素,再通过count的大小来判断入整个队列的次序;
* @author: Golden
* @date: 2020/3/23
*/
class DogCatQueue {
private Queue<Pet> catQueue = new LinkedList();
private Queue<Pet> dogQueue = new LinkedList();
public void add(Pet pet) {
if ("cat".equals(pet.getType())) {
catQueue.add(pet);
} else if ("dog".equals(pet.getType())) {
dogQueue.add(pet);
}
}
public Pet pollDog() {
return dogQueue.poll();
}
public Pet pollCat() {
return catQueue.poll();
}
public Pet pollAll() {
if (!dogQueue.isEmpty() && !catQueue.isEmpty()) {
if (dogQueue.peek().getCount() < catQueue.peek().getCount()) {
return pollDog();
} else {
return pollCat();
}
} else if (!dogQueue.isEmpty()) {
return pollDog();
} else if (!catQueue.isEmpty()) {
return pollCat();
} else {
return null;
}
}
public boolean isEmpty() {
return dogQueue.isEmpty() && catQueue.isEmpty();
}
public boolean isDogEmpty() {
return dogQueue.isEmpty();
}
public boolean isCatEmpty() {
return catQueue.isEmpty();
}
}
class Pet {
String type;
int id; //编号
int count; //一个代表顺序的标识
public Pet(String type, int id, int count) {
this.type = type;
this.id = id;
this.count = count;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
public class Main {
public static void main(String[] args) throws IOException {
DogCatQueue dogCatQueue = new DogCatQueue();
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int row = Integer.parseInt(in.readLine());
int count = 0; //代表入队列的顺序标识
StringBuilder res = new StringBuilder();
while (row-- > 0) {
String[] strArr = in.readLine().split(" ");
String opt = strArr[0];
switch (opt) {
case "add":
String type = strArr[1];
if (type.equals("dog")) {
dogCatQueue.add(new Pet("dog", Integer.parseInt(strArr[2]), count++));
} else {
dogCatQueue.add(new Pet("cat", Integer.parseInt(strArr[2]), count++));
}
break;
case "pollAll":
while (!dogCatQueue.isEmpty()) {
Pet pet = dogCatQueue.pollAll();
res.append(pet.getType() + " " + pet.getId() + "\n");
}
break;
case "pollDog":
while (!dogCatQueue.isDogEmpty()) {
Pet dog = dogCatQueue.pollDog();
res.append("dog " + dog.getId() + "\n");
}
break;
case "pollCat":
while (!dogCatQueue.isCatEmpty()) {
Pet cat = dogCatQueue.pollCat();
res.append("cat " + cat.getId() + "\n");
}
break;
case "isDogEmpty":
res.append(dogCatQueue.isDogEmpty() ? "yes\n" : "no\n");
break;
case "isCatEmpty":
res.append(dogCatQueue.isCatEmpty() ? "yes\n" : "no\n");
break;
case "isEmpty":
res.append(dogCatQueue.isEmpty() ? "yes\n" : "no\n");
break;
}
}
System.out.println(res.substring(0, res.length() - 1));
}
}