#include <bits/stdc++.h>   using namespace std;   const long double PI = acos(-1);   const int _ML = 500;   const char _inpf[] =   ;   const char _outf[] =   ;   template <typename T, typename U>   inline ostream &operator<<(ostream &_out, const pair<T, U> &_p) {     _out << _p.x <<     << _p.y;     return _out;   }   template <typename T, typename U>   inline istream &operator>>(istream &_in, pair<T, U> &_p) {     _in >> _p.x >> _p.y;     return _in;   }   template <typename T>   inline ostream &operator<<(ostream &_out, const vector<T> &_v) {     if (_v.empty()) return _out;     _out << _v.front();     for (auto _it = ++_v.begin(); _it != _v.end(); ++_it) _out <<     << *_it;     return _out;   }   template <typename T>   inline istream &operator>>(istream &_in, vector<T> &_v) {     for (auto &_i : _v) _in >> _i;     return _in;   }   template <typename T>   inline ostream &operator<<(ostream &_out, const set<T> &_s) {     if (_s.empty()) return _out;     _out << *_s.begin();     for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out <<     << *_it;     return _out;   }   template <typename T>   inline ostream &operator<<(ostream &_out, const multiset<T> &_s) {     if (_s.empty()) return _out;     _out << *_s.begin();     for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out <<     << *_it;     return _out;   }   template <typename T>   inline ostream &operator<<(ostream &_out, const unordered_set<T> &_s) {     if (_s.empty()) return _out;     _out << *_s.begin();     for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out <<     << *_it;     return _out;   }   template <typename T>   inline ostream &operator<<(ostream &_out, const unordered_multiset<T> &_s) {     if (_s.empty()) return _out;     _out << *_s.begin();     for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) _out <<     << *_it;     return _out;   }   template <typename T, typename U>   inline ostream &operator<<(ostream &_out, const map<T, U> &_m) {     if (_m.empty()) return _out;     _out <<  (  << _m.begin()->x <<  :   << _m.begin()->y <<  ) ;     for (auto _it = ++_m.begin(); _it != _m.end(); ++_it)       _out <<  , (  << _it->x <<  :   << _it->y <<  ) ;     return _out;   }   template <typename T, typename U>   inline ostream &operator<<(ostream &_out, const unordered_map<T, U> &_m) {     if (_m.empty()) return _out;     _out <<  (  << _m.begin()->x <<  :   << _m.begin()->y <<  ) ;     for (auto _it = ++_m.begin(); _it != _m.end(); ++_it)       _out <<  , (  << _it->x <<  :   << _it->y <<  ) ;     return _out;   }   inline void mainFunction(void) {     int n, m, k;     cin >> n >> m >> k;     vector<string> v(n + 2, string(m + 2,  * ));     int x = 228,         y = 1488 +  m  +  i  +  s  +  h  +  k  +  a  +  =  +  g  +  a  +  y ;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         cin >> v[i][j];         if (v[i][j] ==  X ) {           v[i][j] =  . ;           x = i;           y = j;         }       }     }     const int dx[] = {1, 0, 0, -1};     const int dy[] = {0, -1, 1, 0};     const int N = 1000 * 1000 + 228;     vector<vector<int>> d(n + 2, vector<int>(m + 2, N));     static int qx[N];     static int qy[N];     int ql = 0;     int qr = 1;     qx[0] = x;     qy[0] = y;     d[x][y] = 0;     while (ql != qr) {       int xx = qx[ql];       int yy = qy[ql];       ++ql;       for (int j = 0; j < 4; ++j) {         if (v[xx + dx[j]][yy + dy[j]] ==  .  && d[xx + dx[j]][yy + dy[j]] == N) {           d[xx + dx[j]][yy + dy[j]] = d[xx][yy] + 1;           qx[qr] = xx + dx[j];           qy[qr] = yy + dy[j];           ++qr;         }       }     }     const char c[] = { D ,  L ,  R ,  U };     static char p[228];     p[ U ] =  D ;     p[ D ] =  U ;     p[ R ] =  L ;     p[ L ] =  R ;     string s;     for (int i = 0; i < k; ++i) {       int j;       for (j = 0; j < 4; ++j) {         if (v[x + dx[j]][y + dy[j]] ==  .  &&             d[x + dx[j]][y + dy[j]] <= k - i - 1) {           break;         }       }       if (j == 4) {         cout <<  IMPOSSIBLE  <<   n ;         return;       }       s += c[j];       x += dx[j];       y += dy[j];     }     cout << s <<   n ;   }   int main() {     if (_inpf[0] !=   0 ) assert(freopen(_inpf,  r , stdin) != nullptr);     if (_outf[0] !=   0 ) assert(freopen(_outf,  w , stdout) != nullptr);     cin.tie(nullptr);     ios_base::sync_with_stdio(false);     cout << setprecision(20);     mainFunction();   }