//新生训练
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
typedef pair<int, int> PII;
const int N = 205;
int n, m;
int l;
int A, B, C;
int dis[N][N];
struct node
{
int px, py, op;
};
node pre[N][N];
void dfs(int x, int y)
{
if (x == 0 && y == 0)
{
return;
}
dfs(pre[x][y].px, pre[x][y].py);
switch (pre[x][y].op)
{
case 1:
cout << "FILL(1)\n";
break;
case 2:
cout << "FILL(2)\n";
break;
case 3:
cout << "DROP(1)\n";
break;
case 4:
cout << "DROP(2)\n";
break;
case 5:
cout << "POUR(1,2)\n";
break;
case 6:
cout << "POUR(2,1)\n";
}
}
bool flag = 1;
void bfs()
{
queue<PII> q;
q.push(make_pair(0, 0));
dis[0][0] = 0;
while (!q.empty())
{
PII t = q.front();
q.pop();
int x = t.first, y = t.second;
if (x == C || y == C)
{
cout << dis[x][y] << '\n';
dfs(x, y);
flag = 0;
return;
}
int ix, iy;
// FILL(1)
ix = A, iy = y;
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 1};
q.push(make_pair(ix, iy));
}
// FILL(2)
ix = x, iy = B;
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 2};
q.push(make_pair(ix, iy));
}
// DROP(1)
ix = 0, iy = y;
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 3};
q.push(make_pair(ix, iy));
}
// DROP(2)
ix = x, iy = 0;
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 4};
q.push(make_pair(ix, iy));
}
// POUR(1,2)
ix = x, iy = y;
while (ix && iy < B)
{
--ix;
++iy;
}
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 5};
q.push(make_pair(ix, iy));
}
// POUR(2,1)
ix = x, iy = y;
while (iy && ix < A)
{
++ix;
--iy;
}
if (dis[ix][iy] == -1)
{
dis[ix][iy] = dis[x][y] + 1;
pre[ix][iy] = {x, y, 6};
q.push(make_pair(ix, iy));
}
}
}
void solve()
{
memset(dis, -1, sizeof dis);
cin >> A >> B >> C;
bfs();
if (flag)
cout << "impossible";
}
signed main()
{
int t = 1;
// cin>>t;
while (t--)
{
solve();
}
return 0;
}
//感谢学长的讲解 hwh ;
~~~//仅当笔者个人备忘录使用。