#include #include #include #include #include #include #include using namespace std; #define FORC(it, V) for(__typeof((V).begin()) it = (V).begin(); it != (V).end(); ++it) const int MAXN = 5; const int mod = 23; int inp; int X[MAXN]; int Y[MAXN]; int bio[MAXN]; int mat[MAXN][MAXN]; int myPower(int x, int b) { int p = 1; for (int i = 0; i < b; ++i) { p *= x; p %= mod; } return p; } void postavi(int x) { if (x < 0) { postavi(-x); puts("INV"); return ; } printf("NUM %d\n", x); } void modaj(int m) { postavi(m); puts("MOD"); } int deter(int r) { if (r == inp) return 1; int sum = 0; int sign = 1; for (int j = 0; j < inp; ++j) { if (bio[j]) continue; bio[j] = true; sum += sign * mat[r][j] * deter(r+1); sum %= mod; if (sum < 0) sum += mod; sign = -sign; bio[j] = false; } return sum; } int getDeter() { memset(bio, 0, sizeof bio); return deter(0); } int A[MAXN]; int save[MAXN]; int main(void) { for (; scanf("%d", &inp) == 1; ) { if (inp == 0) break; for (int i = 0; i < inp; ++i) scanf("%d %d", X+i, Y+i); // deter for (int i = 0; i < inp; ++i) for (int j = 0; j < inp; ++j) { mat[i][j] = myPower(X[i], j); } int D = getDeter(); int invD = myPower(D, mod-2); // printf("D = %d\n", D); for (int i = 0; i < inp; ++i) { for (int r = 0; r < inp; ++r) { save[r] = mat[r][i]; mat[r][i] = Y[r]; } int Dx = getDeter(); A[i] = Dx * invD % mod; for (int r = 0; r < inp; ++r) { mat[r][i] = save[r]; } } // for (int i = 0; i < inp; ++i) { // printf("A[%d] = %d\n", i, A[i]); // } postavi(A[0]); puts("SWP"); for (int p = 1; p < inp; ++p) { for (int i = 0; i < p; ++i) puts("DUP"); for (int i = 1; i < p; ++i) { puts("MUL"); } modaj(mod); postavi(A[p]); puts("MUL"); modaj(mod); puts("SWP"); } puts("POP"); for (int p = 1; p < inp; ++p) puts("ADD"); modaj(mod); postavi(mod); puts("ADD"); modaj(mod); puts("END"); putchar('\n'); } return 0; }