#include <iostream>
using namespace std;
/**
* n: 當前箱子總數
* i: 目標移動步數
* src: 起始柱子
* aux: 輔助柱子
* dest: 目標柱子
*/
void solve(int n, long long i, int src, int aux, int dest) {
// 計算移動第 n 個箱子所需的步數位置 (2^(n-1))
long long mid = 1LL << (n - 1);
if (i == mid) {
// 如果剛好是中間這一步,就是移動第 n 個箱子
cout << "move " << n << " from " << src << " to " << dest << endl;
} else if (i < mid) {
// 如果步數小於中間值,箱子在前半段:從 src 移往 aux
solve(n - 1, i, src, dest, aux);
} else {
// 如果步數大於中間值,箱子在後半段:從 aux 移往 dest
// 步數要減去前半段已完成的次數
solve(n - 1, i - mid, aux, src, dest);
}
}
int main() {
int N;
long long i;
// 讀入 N 與第 i 次移動
while (cin >> N >> i) {
solve(N, i, 1, 2, 3);
}
return 0;
}