#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string>

struct Pair {
    double coeff, cost; 
    
    int id;
};


// Перебор - возвращает вектор всех последовательностей, дающих максимум:
std::vector<std::vector<int>> brute(const std::vector<Pair>& arr) {
    const int n = (int)arr.size();
    std::vector<int> answ(n); 
    for (int i = 0; i < n; ++i) {
        answ[i] = i;
    }
    double best = -1e9;
    std::vector<std::vector<int>> vars;
    do {
        double temp = 0;
        for (int i : answ) {
            (temp *= arr[i].coeff) -= arr[i].cost;
        }
        if (temp == best) {
            vars.push_back(answ);
        } else if (temp > best) {
            vars.clear();
            vars.push_back(answ);
            best = temp;
        }
    } while (std::next_permutation(answ.begin(), answ.end()));
    return vars;
}

// Генерация теста на 10 элементов:
void gen() {
    auto file = fopen("input.txt", "wt");
    fprintf(file, "10 0\n");
    for (int i = 0; i < 10; ++i) {
        double a = 1LL * std::rand() * std::rand() % 10000000 * 1e-6;
        int b = std::rand() % 100 + 1;
        fprintf(file, "%f %d\n", a, b);
    }
    fclose(file);
    std::exit(0);
}


int main() {
    //gen();
    int n; scanf("%d %*d", &n);
    
    std::vector<Pair> arr(n);
    for (int i = 0; i < n; ++i) {
        scanf("%lf %lf", &arr[i].coeff, &arr[i].cost);
        arr[i].id = i+1;
    }
	
    for (auto& row : brute(arr)) {
        printf("seq: ");
        for (auto& i : row) {
            printf("%d ", i+1);
        }
        printf("\n");
    }
    
    std::stable_sort(arr.begin(), arr.end(), [](const Pair& a, const Pair& b){
        return a.coeff * b.cost - a.cost > b.coeff * a.cost - b.cost;
    });
    
    for (auto& it : arr) {
        printf("%d\n", it.id);
    }
    
    return 0;
}