1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//PRZEMYSL ASSERTY
//SPRAWDZ CORNER CASE'Y, MINIMALNE I MAKSYMALNE WEJŚCIE I WYJŚCIE
//MODULO = 1
#include <cstdio>
#include <cstring>
#include <cassert>
#include <cmath>
#include <algorithm>
#include <queue>
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORD(i,a,b) for(int i=(a);i>=(b);--i)
#define foreach(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define all(c) (c).begin(),(c).end()
#define scanf(...) scanf(__VA_ARGS__)?:0
#define e1 first
#define e2 second
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int n,m,x,v,xd,w[5001],a[5001][5001];
int main() {
	scanf("%d%d",&n,&m);
	FOR(i,1,m) w[i]=i;
	FOR(i,1,n) scanf("%d",&a[1][i]);
	FOR(i,2,m) {
		memcpy(a[i]+1,a[i-1]+1,sizeof(int)*n);
		scanf("%d%d",&x,&v);
		a[i][x]=v;
	}
	FORD(i,n,1) xd=i,stable_sort(w+1,w+n+1,[](int u,int v) { return a[u][xd]<a[v][xd]; });
	FOR(i,1,m) printf("%d ",w[i]);
}