#include <iostream>
#include <array>
#include <utility>
#include <set>
#include <map>
#include <queue>
#include <stack>

using namespace std;
using board = array<array<int, 3>, 3>;

bool game_won(const board& b) {
  for (size_t i=0;i<3;i++)
    for (size_t j=0;j<3;j++)
      if (b[i][j] != (1 + i + 3*j) % 9)
        return false;
  return true;
}

pair<int, int> empty_position(const board& b){
  for (size_t i=0;i<3;i++)
    for (size_t j=0;j<3;j++)
      if (b[i][j] == 0) 
        return make_pair(i, j);
  throw(0);
}

board read_board() {
  board result;
  for (int i=0;i<9;i++)
    cin >> result[i%3][i/3];
  return result;
}

/*
x =2, y = 1
1  2  3
4  5  
6  7  8

x x x
x 0 x
x x x

*/

template<typename T>
void find_neighbors(const board &b, T submit) {
  auto [x, y] = empty_position(b);
  if (x>0) {
    board curr = b;
    swap(curr[x][y], curr[x-1][y]);
    submit(curr);
  }
  if (x<2) {
    board curr = b;
    swap(curr[x][y], curr[x+1][y]);
    submit(curr);
  }
  if (y>0) {
    board curr = b;
    swap(curr[x][y], curr[x][y-1]);
    submit(curr);
  }
  if (y<2) {
    board curr = b;
    swap(curr[x][y], curr[x][y+1]);
    submit(curr);
  }
}

void printBoard(const board &b) {
  for (size_t i=0;i<3;i++) {
    for (size_t j=0;j<3;j++)
      cout << b[j][i] << " ";
    cout << endl;
  }
  cout << endl;
}

int main() {
  set<board> visited;
  queue<board> to_visit;
  map<board,board> backref;
  
  board b = read_board();
  to_visit.push(b);

  while(!to_visit.empty()){
    auto current = to_visit.front();
    if (game_won(current))
      break;
    to_visit.pop();
    find_neighbors(current, [&](board b){
      if (visited.find(b) == visited.end()) {
        to_visit.push(b);
        if (backref.count(b) == 0)
          backref[b] = current;
      }
    });
    visited.insert(current);
  }
  if (to_visit.empty())
    cout << "fail" << endl;
  else {
    cout << "victory" << endl;
    board i = to_visit.front();
    stack<board> result;
    while(i!=b){
      result.push(i);
      i=backref[i];
    }
    while(!result.empty()){
      printBoard(result.top());
      result.pop();
    }
  }
#if 0
  board b = read_board();
  auto [x,y] = empty_position(b);
  cout << b[x][y] << endl;
  std::cout << "Hello World!\n";
#endif
}
