


package bupt.syh;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static Envelope card;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<Envelope> list = new ArrayList<Envelope>();
while (in.hasNext()) {
list.clear();
int enveNum = in.nextInt();
long cardX = in.nextLong();
long cardY = in.nextLong();
card = new Envelope(cardX, cardY);
while (enveNum-- > 0) {
long elX = in.nextLong();
long elY = in.nextLong();
Envelope envelop = new Envelope(elX, elY);
list.add(envelop);
}
List<Integer> indexList = new ArrayList<Integer>(); // 信封的序号的序列
List<List<Integer>> rstList = new ArrayList<List<Integer>>(); // 所有序列的集合
helper(rstList, indexList, list);
int maxEnvelopeNum = Integer.MIN_VALUE;
List<Integer> longest = null;
for (List<Integer> each : rstList) {
if (maxEnvelopeNum < each.size()) {
maxEnvelopeNum = each.size();
longest = each;
}
}
// print
System.out.println(maxEnvelopeNum);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < longest.size(); i++) {
builder.append(longest.get(i) + 1 + " ");
}
System.out.println(builder.toString().trim());
}
}
// 搜索
public static void helper(List<List<Integer>> rstList, List<Integer> indexList, List<Envelope> enveLopeList) {
Envelope outestEnvelope = null; // 当前最外层的信封
if (indexList.isEmpty()) {
outestEnvelope = card;
} else {
outestEnvelope = enveLopeList.get(indexList.get(indexList.size() - 1));
}
for (int i = 0; i < enveLopeList.size(); i++) {
Envelope nextEnvelope = enveLopeList.get(i);
if (outestEnvelope.canInto(nextEnvelope)) {
indexList.add(i);
helper(rstList, indexList, enveLopeList);
indexList.remove(indexList.size() - 1); //取出来
}
}
rstList.add(new ArrayList<Integer>(indexList));
}
static class Envelope {
public long x;
public long y;
public Envelope(long x, long y) {
super();
this.x = x;
this.y = y;
}
// 可不可以放的进
public boolean canInto(Envelope el) {
if (x < el.x && y < el.y) {
return true;
} else {
return false;
}
}
}
}