Submission #63337953


Source Code Expand

#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
#include<chrono>
using namespace std;
template<class T> struct cLtraits_identity{
  using type = T;
}
;
template<class T> using cLtraits_try_make_unsigned =
  typename conditional<
    is_integral<T>::value,
    make_unsigned<T>,
    cLtraits_identity<T>
    >::type;
void*wmem;
char memarr[96000000];
template<class S, class T> inline S chmin(S &a, T b){
  if(a>b){
    a=b;
  }
  return a;
}
template<class S, class T> inline S chmax(S &a, T b){
  if(a<b){
    a=b;
  }
  return a;
}
template<class S, class T> inline S divup_L(S a, T b){
  return (a+b-1)/b;
}
template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){
  static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );
  (*arr)=(T*)(*mem);
  (*mem)=((*arr)+x);
}
template<class T> inline void walloc1d(T **arr, int x1, int x2, void **mem = &wmem){
  walloc1d(arr, x2-x1, mem);
  (*arr) -= x1;
}
inline int Ilog2_f_L(const int n){
  int res;
  if(n <= 0){
    return -1;
  }
  res = sizeof(int) * 8 - __builtin_clz(n) - 1;
  return res;
}
inline int Ilog2_f_L(const long long n){
  int res;
  if(n <= 0){
    return -1;
  }
  res = sizeof(long long) * 8 - __builtin_clzll(n) - 1;
  return res;
}
template<class T1> void sortI(int N, T1 a[], void *mem = wmem){
  sort(a, a+N);
}
template<class T1, class T2> void sortI(int N, T1 a[], T2 b[], void *mem = wmem){
  int i;
  pair<T1, T2>*arr;
  walloc1d(&arr, N, &mem);
  for(i=(0);i<(N);i++){
    arr[i].first = a[i];
    arr[i].second = b[i];
  }
  sort(arr, arr+N);
  for(i=(0);i<(N);i++){
    a[i] = arr[i].first;
    b[i] = arr[i].second;
  }
}
template<class T1, class T2, class T3> void sortI(int N, T1 a[], T2 b[], T3 c[], void *mem = wmem){
  int i;
  pair<T1, pair<T2, T3> >*arr;
  walloc1d(&arr, N, &mem);
  for(i=(0);i<(N);i++){
    arr[i].first = a[i];
    arr[i].second.first = b[i];
    arr[i].second.second = c[i];
  }
  sort(arr, arr+N);
  for(i=(0);i<(N);i++){
    a[i] = arr[i].first;
    b[i] = arr[i].second.first;
    c[i] = arr[i].second.second;
  }
}
template<class T1, class T2, class T3, class T4> void sortI(int N, T1 a[], T2 b[], T3 c[], T4 d[], void *mem = wmem){
  int i;
  pair<pair<T1, T2>, pair<T3, T4> >*arr;
  walloc1d(&arr, N, &mem);
  for(i=(0);i<(N);i++){
    arr[i].first.first = a[i];
    arr[i].first.second = b[i];
    arr[i].second.first = c[i];
    arr[i].second.second = d[i];
  }
  sort(arr, arr+N);
  for(i=(0);i<(N);i++){
    a[i] = arr[i].first.first;
    b[i] = arr[i].first.second;
    c[i] = arr[i].second.first;
    d[i] = arr[i].second.second;
  }
}
template<class T> inline int sort_helper_getbit(T A[]){
  return -1;
}
template<> inline int sort_helper_getbit(int A[]){
  return sizeof(int)*8;
}
template<> inline int sort_helper_getbit(unsigned A[]){
  return sizeof(unsigned)*8;
}
template<> inline int sort_helper_getbit(long long A[]){
  return sizeof(long long)*8;
}
template<> inline int sort_helper_getbit(unsigned long long A[]){
  return sizeof(unsigned long long)*8;
}
template<> inline int sort_helper_getbit(char A[]){
  return sizeof(char)*8;
}
template<class T> void sortA_1_int_L(int N, T A[], void *mem = wmem){
  int i;
  int j;
  int k;
  int b;
  int s;
  int ok;
  ok = 1;
  for(i=(1);i<(N);i++){
    if(A[i-1] > A[i]){
      ok = 0;
      break;
    }
  }
  if(ok){
    return;
  }
  if(N < 128){
    sort(A,A+N);
    return;
  }
  b = sort_helper_getbit(A);
  if(b==-1){
    sort(A,A+N);
    return;
  }
  T mn;
  T mx;
  mn = mx = A[0];
  for(i=(1);i<(N);i++){
    chmin(mn, A[i]);
  }
  for(i=(1);i<(N);i++){
    chmax(mx, A[i]);
  }
  ok = 1;
  if(mn < 0 && mx > 0 && (mn < -N || mx > N)){
    ok = 0;
  }
  if(ok && mx - mn > N){
    ok = 0;
  }
  if(ok){
    int*tmp;
    walloc1d(&tmp, mx-mn+1, &mem);
    for(i=(0);i<(mx-mn+1);i++){
      tmp[i] = 0;
    }
    for(i=(0);i<(N);i++){
      tmp[A[i]-mn]++;
    }
    k = 0;
    for(i=(0);i<(mx-mn+1);i++){
      while(tmp[i] > 0){
        tmp[i]--;
        A[k++] = i+mn;
      }
    }
    return;
  }
  {
    typename make_unsigned<T>::type *t[2];
    typename make_unsigned<T>::type  mask;
    typename make_unsigned<T>::type  cur;
    typename make_unsigned<T>::type  one = 1;
    T tone = 1;
    int*pos;
    int nn = 0;
    int ss;
    s =Ilog2_f_L(N);
    if(s > 8){
      s = (8 + (s-7)/2);
    }
    ss = 1;
    for(;;){
      if(ss >= b){
        break;
      }
      if( mx >= 0 && (tone << (ss-1)) < mx ){
        ss++;
        continue;
      }
      if( mn < 0 && -(tone << (ss-1)) >= mn ){
        ss++;
        continue;
      }
      break;
    }
    k =(divup_L(ss,s));
    s =(divup_L(ss,k));
    mask = 0;
    for(i=(0);i<(b);i++){
      if(i < s*k){
        mask |= one << i;
      }
    }
    t[0] = (typename make_unsigned<T>::type *) A;
    walloc1d(&t[1], N, &mem);
    walloc1d(&pos, (1<<s)+1, &mem);
    for(j=(0);j<(k);j++){
      cur = 0;
      for(i=(0);i<(b);i++){
        if(s*j <= i && i < s*(j+1) && i < b){
          cur |= one << i;
        }
      }
      for(i=(0);i<((1<<s)+1);i++){
        pos[i] = 0;
      }
      for(i=(0);i<(N);i++){
        pos[((t[nn][i]&cur)>>(s*j))+1]++;
      }
      for(i=(0);i<((1<<s));i++){
        pos[i+1] += pos[i];
      }
      for(i=(0);i<(N);i++){
        t[nn^1][pos[(t[nn][i]&cur)>>(s*j)]++] = t[nn][i];
      }
      nn ^= 1;
      mask ^= cur;
    }
    if(mn < 0 && mx >= 0){
      k = 0;
      for(i=(0);i<(N);i++){
        if(A[i] < 0){
          k++;
        }
      }
      for(i=(0);i<(k);i++){
        t[nn^1][i] = t[nn][N-k+i];
      }
      for(i=(k);i<(N);i++){
        t[nn^1][i] = t[nn][i-k];
      }
      nn ^= 1;
    }
    if(nn==1){
      for(i=(0);i<(N);i++){
        t[0][i] = t[1][i];
      }
    }
    return;
  }
  sort(A, A+N);
}
template<class T> void sortA_1_nonint_L(int N, T A[], void *mem = wmem){
  sort(A,A+N);
}
template<class T> void sortA_1_call_L(int N, T A[], void *mem = wmem){
  sortA_1_nonint_L(N, A, mem);
}
template<> void sortA_1_call_L(int N, int A[], void *mem){
  sortA_1_int_L(N, A, mem);
}
template<> void sortA_1_call_L(int N, unsigned A[], void *mem){
  sortA_1_int_L(N, A, mem);
}
template<> void sortA_1_call_L(int N, long long A[], void *mem){
  sortA_1_int_L(N, A, mem);
}
template<> void sortA_1_call_L(int N, unsigned long long A[], void *mem){
  sortA_1_int_L(N, A, mem);
}
template<> void sortA_1_call_L(int N, char A[], void *mem){
  sortA_1_int_L(N, A, mem);
}
template<class T1> void sortA(int N, T1 a[], void *mem = wmem){
  sortA_1_call_L(N, a, mem);
}
template<class T1, class T2> void sortA_2_int_L(int N, T1 A[], T2 B[], void *mem = wmem){
  int i;
  int b_a;
  int b_b;
  int s1;
  int s2;
  int so2;
  T1 mn1;
  T1 mx1;
  T2 mn2;
  T2 mx2;
  typename cLtraits_try_make_unsigned<T1>::type r1;
  typename cLtraits_try_make_unsigned<T2>::type r2;
  so2 = 1;
  for(i=(1);i<(N);i++){
    if(A[i-1] > A[i] || (A[i-1]==A[i] && B[i-1] > B[i])){
      so2 = 0;
      break;
    }
  }
  if(so2){
    return;
  }
  so2 = 1;
  for(i=(1);i<(N);i++){
    if(A[i-1] > A[i]){
      so2 = 0;
      break;
    }
  }
  if(so2==1){
    int k = 0;
    for(i=(1);i<(N);i++){
      if(A[i] != A[i-1]){
        sortA_1_call_L(i-k, B+k, mem);
        k = i;
      }
    }
    sortA_1_call_L(N-k, B+k, mem);
    return;
  }
  if(N < 128){
    sortI(N,A,B,mem);
    return;
  }
  b_a = sort_helper_getbit(A);
  b_b = sort_helper_getbit(B);
  if(b_a == -1 || b_b == -1){
    sortI(N,A,B,mem);
    return;
  }
  mn1 = mx1 = A[0];
  for(i=(1);i<(N);i++){
    chmin(mn1, A[i]);
  }
  for(i=(1);i<(N);i++){
    chmax(mx1, A[i]);
  }
  mn2 = mx2 = B[0];
  for(i=(1);i<(N);i++){
    chmin(mn2, B[i]);
  }
  for(i=(1);i<(N);i++){
    chmax(mx2, B[i]);
  }
  if(mn1 < -4611686016279904256LL || mn2 < -4611686016279904256LL || mx1 > 4611686016279904256LL || mx2 > 4611686016279904256LL || mx1-mn1 > 4611686016279904256LL || mx2-mn2 > 4611686016279904256LL){
    sortI(N,A,B,mem);
    return;
  }
  r1 = (typename cLtraits_try_make_unsigned<T1>::type)(mx1) - (typename cLtraits_try_make_unsigned<T1>::type)(mn1);
  r2 = (typename cLtraits_try_make_unsigned<T2>::type)(mx2) - (typename cLtraits_try_make_unsigned<T2>::type)(mn2);
  if(r1 == 0){
    sortA_1_call_L(N, B, mem);
    return;
  }
  if(r2 == 0){
    sortA_1_call_L(N, A, mem);
    return;
  }
  if(r1 <= N){
    so2 = 1;
    for(i=(1);i<(N);i++){
      if(B[i-1] > B[i]){
        so2 = 0;
        break;
      }
    }
    if(so2 == 1){
      T1*aa;
      T2*bb;
      int*pos;
      int k;
      walloc1d(&aa,N,&mem);
      walloc1d(&bb,N,&mem);
      walloc1d(&pos,r1+2,&mem);
      for(i=(0);i<(r1+2);i++){
        pos[i] = 0;
      }
      for(i=(0);i<(N);i++){
        aa[i] = A[i];
      }
      for(i=(0);i<(N);i++){
        bb[i] = B[i];
      }
      for(i=(0);i<(N);i++){
        pos[(typename cLtraits_try_make_unsigned<T1>::type)((typename cLtraits_try_make_unsigned<T1>::type)aa[i]-(typename cLtraits_try_make_unsigned<T1>::type)mn1)+1]++;
      }
      for(i=(1);i<(r1+2);i++){
        pos[i] += pos[i-1];
      }
      for(i=(0);i<(N);i++){
        k = pos[(typename cLtraits_try_make_unsigned<T1>::type)((typename cLtraits_try_make_unsigned<T1>::type)aa[i]-(typename cLtraits_try_make_unsigned<T1>::type)mn1)+0]++;
        A[k] = aa[i];
        B[k] = bb[i];
      }
      return;
    }
  }
  s1 = s2 = 1;
  while( s1 < 64 && r1 >= (1ULL<<s1) ){
    s1++;
  }
  while( s2 < 64 && r2 >= (1ULL<<s2) ){
    s2++;
  }
  if(s1 + s2 <= 32){
    unsigned*tmp;
    walloc1d(&tmp,N,&mem);
    for(i=(0);i<(N);i++){
      tmp[i] = (((unsigned)((int)A[i]-(int)mn1)) << s2) | ((unsigned)((int)B[i]-(int)mn2));
    }
    sortA_1_call_L(N, tmp, mem);
    for(i=(0);i<(N);i++){
      A[i] = ((int)(tmp[i] >> s2)) + ((int)mn1);
      B[i] = ((int)(tmp[i] & ((1U<<s2)-1))) + ((int)mn2);
    }
    return;
  }
  if(s1 + s2 <= 64){
    unsigned long long*tmp;
    walloc1d(&tmp,N,&mem);
    for(i=(0);i<(N);i++){
      tmp[i] = (((unsigned long long)((long long)A[i]-(long long)mn1)) << s2) | ((unsigned long long)((long long)B[i]-(long long)mn2));
    }
    sortA_1_call_L(N, tmp, mem);
    for(i=(0);i<(N);i++){
      A[i] = ((long long)(tmp[i] >> s2)) + ((long long)mn1);
      B[i] = ((long long)(tmp[i] & ((1ULL<<s2)-1))) + ((long long)mn2);
    }
    return;
  }
  sortI(N,A,B,mem);
}
template<class T1, class T2> void sortA_2_nonint_L(int N, T1 A[], T2 B[], void *mem = wmem){
  sortI(N,A,B,mem);
}
template<class T1, class T2> void sortA_2_call_L(int N, T1 A[], T2 B[], void *mem = wmem){
  sortA_2_nonint_L(N, A, B, mem);
}
template<class T2> void sortA_2_call_L(int N, int A[], T2 B[], void *mem){
  sortA_2_int_L(N, A, B, mem);
}
template<class T2> void sortA_2_call_L(int N, unsigned A[], T2 B[], void *mem){
  sortA_2_int_L(N, A, B, mem);
}
template<class T2> void sortA_2_call_L(int N, long long A[], T2 B[], void *mem){
  sortA_2_int_L(N, A, B, mem);
}
template<class T2> void sortA_2_call_L(int N, unsigned long long A[], T2 B[], void *mem){
  sortA_2_int_L(N, A, B, mem);
}
template<class T2> void sortA_2_call_L(int N, char A[], T2 B[], void *mem){
  sortA_2_int_L(N, A, B, mem);
}
template<class T1, class T2> void sortA(int N, T1 a[], T2 b[], void *mem = wmem){
  sortA_2_call_L(N, a, b, mem);
}
template<class T1, class T2, class T3> void sortA(int N, T1 a[], T2 b[], T3 c[], void *mem = wmem){
  int i;
  pair<T1, pair<T2, T3> >*arr;
  walloc1d(&arr, N, &mem);
  for(i=(0);i<(N);i++){
    arr[i].first = a[i];
    arr[i].second.first = b[i];
    arr[i].second.second = c[i];
  }
  sort(arr, arr+N);
  for(i=(0);i<(N);i++){
    a[i] = arr[i].first;
    b[i] = arr[i].second.first;
    c[i] = arr[i].second.second;
  }
}
template<class T1, class T2, class T3, class T4> void sortA(int N, T1 a[], T2 b[], T3 c[], T4 d[], void *mem = wmem){
  int i;
  pair<pair<T1, T2>, pair<T3, T4> >*arr;
  walloc1d(&arr, N, &mem);
  for(i=(0);i<(N);i++){
    arr[i].first.first = a[i];
    arr[i].first.second = b[i];
    arr[i].second.first = c[i];
    arr[i].second.second = d[i];
  }
  sort(arr, arr+N);
  for(i=(0);i<(N);i++){
    a[i] = arr[i].first.first;
    b[i] = arr[i].first.second;
    c[i] = arr[i].second.first;
    d[i] = arr[i].second.second;
  }
}
struct Timer2{
  std::chrono::time_point<std::chrono::high_resolution_clock> start_time;
  void set(void){
    start_time = std::chrono::high_resolution_clock::now();
  }
  double get(void){
    auto end_time = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
    return duration.count() * 1e-6;
  }
}
;
struct Rand{
  unsigned x;
  unsigned y;
  unsigned z;
  unsigned w;
  Rand(void){
    x=123456789;
    y=362436069;
    z=521288629;
    w=(unsigned)time(NULL);
  }
  Rand(unsigned seed){
    x=123456789;
    y=362436069;
    z=521288629;
    w=seed;
  }
  inline unsigned get(void){
    unsigned t;
    t = (x^(x<<11));
    x=y;
    y=z;
    z=w;
    w = (w^(w>>19))^(t^(t>>8));
    return w;
  }
  inline double getUni(void){
    return get()/4294967296.0;
  }
  inline int get(int a){
    return (int)(a*getUni());
  }
  inline int get(int a, int b){
    return a+(int)((b-a+1)*getUni());
  }
  inline long long get(long long a){
    return(long long)(a*getUni());
  }
  inline long long get(long long a, long long b){
    return a+(long long)((b-a+1)*getUni());
  }
  inline double get(double a, double b){
    return a+(b-a)*getUni();
  }
  inline int getExp(int a){
    return(int)(exp(getUni()*log(a+1.0))-1.0);
  }
  inline int getExp(int a, int b){
    return a+(int)(exp(getUni()*log((b-a+1)+1.0))-1.0);
  }
}
;
inline int my_getchar_unlocked(){
  static char buf[1048576];
  static int s = 1048576;
  static int e = 1048576;
  if(s == e && e == 1048576){
    e = fread_unlocked(buf, 1, 1048576, stdin);
    s = 0;
  }
  if(s == e){
    return EOF;
  }
  return buf[s++];
}
inline void rd(int &x){
  int k;
  int m=0;
  x=0;
  for(;;){
    k = my_getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = my_getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void rd(char &c){
  int i;
  for(;;){
    i = my_getchar_unlocked();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c = i;
}
inline int rd(char c[]){
  int i;
  int sz = 0;
  for(;;){
    i = my_getchar_unlocked();
    if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
      break;
    }
  }
  c[sz++] = i;
  for(;;){
    i = my_getchar_unlocked();
    if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
      break;
    }
    c[sz++] = i;
  }
  c[sz]='\0';
  return sz;
}
struct MY_WRITER{
  char buf[1048576];
  int s;
  int e;
  MY_WRITER(){
    s = 0;
    e = 1048576;
  }
  ~MY_WRITER(){
    if(s){
      fwrite_unlocked(buf, 1, s, stdout);
    }
  }
}
;
MY_WRITER MY_WRITER_VAR;
void my_putchar_unlocked(int a){
  if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
    fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
    MY_WRITER_VAR.s = 0;
  }
  MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
}
template<class T> inline void wt_L(const vector<T> &x);
template<class T> inline void wt_L(const set<T> &x);
template<class T> inline void wt_L(const multiset<T> &x);
template<class T1, class T2> inline void wt_L(const pair<T1,T2> x);
inline void wt_L(const char a){
  my_putchar_unlocked(a);
}
inline void wt_L(int x){
  int s=0;
  int m=0;
  char f[10];
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    my_putchar_unlocked('-');
  }
  while(s--){
    my_putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    my_putchar_unlocked(c[i]);
  }
}
template<class S> inline void arrInsert(const int k, int &sz, S a[], const S aval){
  int i;
  sz++;
  for(i=sz-1;i>k;i--){
    a[i] = a[i-1];
  }
  a[k] = aval;
}
template<class S, class T> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval){
  int i;
  sz++;
  for(i=sz-1;i>k;i--){
    a[i] = a[i-1];
  }
  for(i=sz-1;i>k;i--){
    b[i] = b[i-1];
  }
  a[k] = aval;
  b[k] = bval;
}
template<class S, class T, class U> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){
  int i;
  sz++;
  for(i=sz-1;i>k;i--){
    a[i] = a[i-1];
  }
  for(i=sz-1;i>k;i--){
    b[i] = b[i-1];
  }
  for(i=sz-1;i>k;i--){
    c[i] = c[i-1];
  }
  a[k] = aval;
  b[k] = bval;
  c[k] = cval;
}
template<class S, class T, class U, class V> inline void arrInsert(const int k, int &sz, S a[], const S aval, T b[], const T bval, U c[], const U cval, V d[], const V dval){
  int i;
  sz++;
  for(i=sz-1;i>k;i--){
    a[i] = a[i-1];
  }
  for(i=sz-1;i>k;i--){
    b[i] = b[i-1];
  }
  for(i=sz-1;i>k;i--){
    c[i] = c[i-1];
  }
  for(i=sz-1;i>k;i--){
    d[i] = d[i-1];
  }
  a[k] = aval;
  b[k] = bval;
  c[k] = cval;
  d[k] = dval;
}
const int LOCAL = 0;
const int TEST_CASE = 30;
const double TL = 1.99;
Timer2 timer;
Rand rnd;
int N;
int M;
char A[20][20];
char dirstr[6] = "UDLR";
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int ress;
int resa[1000000];
int resd[1000000];
int tmps;
int tmpa[1000000];
int tmpd[1000000];
inline int calc_dist(int x1, int y1, int x2, int y2){
  return abs(x1-x2) + abs(y1-y2);
}
inline int calc_id(vector<vector<int>> &mp, int &cx, int &cy, int x[], int y[], int a, int b){
  int i;
  int j;
  int t;
  int res = a;
  int d = 1073709056;
  for(i=(a);i<(b);i++){
    if(x[i] < 0){
      continue;
    }
    t = calc_dist(cx, cy, x[i], y[i]);
    if(d > t){
      d = t;
      res= i;
    }
  }
  return res;
}
inline int calc_dir(vector<vector<int>> &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
  int i;
  int j;
  int k;
  int hx;
  int hy;
  int d = 1073709056;
  int di;
  int t;
  int ddx;
  int ddy;
  int res = 0;
  if(dir==-4){
    return calc_dir(mp, cx, cy, id, type, x, y, -1)^1;
  }
  if(dir==-5){
    return calc_dir(mp, cx, cy, id, type, x, y, -2)^1;
  }
  if(dir==-6){
    return calc_dir(mp, cx, cy, id, type, x, y, -3)^1;
  }
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      if(mp[i][j]==-2){
        if(type != -1 && A[i][j] != 'A'+type){
          continue;
        }
        t = calc_dist(i,j,x[id],y[id]);
        if(d > t){
          d = t;
          hx = i;
          hy = j;
        }
      }
    }
  }
  ddx = hx - i;
  ddy = hy - j;
  if(dir == -1){
    ddy = 0;
  }
  if(dir == -2){
    ddx = 0;
  }
  di = 0;
  for(d=(0);d<(4);d++){
    t = ddx * dx[d] + ddy * dy[d];
    if(t > di){
      di = t;
      res = d;
    }
  }
  return res;
}
int my_move(vector<vector<int>> &mp, int &cx, int &cy, int dir){
  int nx;
  int ny;
  nx = cx + dx[dir];
  ny = cy + dy[dir];
  if(nx < 0 || ny < 0 || nx >= N || ny >= N){
    return 0;
  }
  arrInsert(tmps,tmps,tmpa,1,tmpd,dir);
  cx = nx;
  cy = ny;
  return 1;
}
int my_move(vector<vector<int>> &mp, int &cx, int &cy, int tx, int ty){
  int d;
  int nx;
  int ny;
  for(d=(0);d<(4);d++){
    for(;;){
      nx = cx + dx[d];
      ny = cy + dy[d];
      if(nx < 0 || ny < 0 || nx >= N || ny >= N || abs(cx-tx)+abs(cy-ty) <= abs(nx-tx)+abs(ny-ty)){
        break;
      }
      my_move(mp, cx, cy, d);
    }
  }
  return 1;
}
int id_move(vector<vector<int>> &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
  int rx;
  int ry;
  int nx;
  int ny;
  rx = x[id];
  ry = y[id];
  if(rx < 0){
    return 0;
  }
  nx = rx + dx[dir];
  ny = ry + dy[dir];
  if(nx < 0 || ny < 0 || nx >= N || ny >= N){
    return 0;
  }
  if(mp[nx][ny] >= 0){
    return 0;
  }
  if(mp[nx][ny] == -2 && (type != -1 && A[nx][ny] != 'A'+type)){
    return 0;
  }
  my_move(mp, cx, cy, rx, ry);
  arrInsert(tmps,tmps,tmpa,2,tmpd,dir);
  cx = nx;
  cy = ny;
  mp[rx][ry] = -1;
  if(mp[nx][ny] != -2){
    mp[nx][ny] = id;
    x[id] = nx;
    y[id] = ny;
  }
  else{
    x[id] = y[id] = -1;
  }
  return 1;
}
int id_roll(vector<vector<int>> &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
  int i;
  int j;
  int k;
  int sx;
  int sy;
  int nx;
  int ny;
  int tnx;
  int tny;
  int valid = 1;
  nx = sx = x[id];
  ny = sy = y[id];
  if(sx < 0){
    return 0;
  }
  for(;;){
    tnx = nx + dx[dir];
    tny = ny + dy[dir];
    if(tnx < 0 || tny < 0 || tnx >= N || tny >= N){
      break;
    }
    if(mp[tnx][tny] >= 0){
      break;
    }
    if(mp[tnx][tny] == -2){
      if(type==-1 || A[tnx][tny]=='A'+type){
        nx = tnx;
        ny = tny;
        break;
      }
      return 0;
    }
    nx = tnx;
    ny = tny;
  }
  if(nx == sx && ny == sy){
    return 0;
  }
  my_move(mp, cx, cy, sx, sy);
  arrInsert(tmps,tmps,tmpa,3,tmpd,dir);
  mp[sx][sy] = -1;
  if(mp[nx][ny] != -2){
    mp[nx][ny] = id;
    x[id] = nx;
    y[id] = ny;
  }
  else{
    x[id] = y[id] = -1;
  }
  return 1;
}
int id_fall(vector<vector<int>> &mp, int &cx, int &cy, int id, int type, int x[], int y[]){
  int d;
  int i;
  int j;
  int k;
  int hx;
  int hy;
  int dist;
  int t;
  int px;
  int py;
  int sx;
  int sy;
  int nx;
  int ny;
  int ddx;
  int ddy;
  static int ds[20][20];
  static int q[400];
  static int qs;
  static int qe;
  dist = 1073709056;
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      if(mp[i][j] == -2){
        if(type != -1 && A[i][j] != 'A'+type){
          continue;
        }
        t = abs(i - x[id]) + abs(j - y[id]);
        if(dist > t){
          dist = t;
          hx = i;
          hy = j;
        }
      }
    }
  }
  if(dist == 1073709056){
    return 0;
  }
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      ds[i][j] = 1073709056;
    }
  }
  ds[hx][hy] = 0;
  qs = qe = 0;
  q[qe++] = hx*N+hy;
  for(d=(0);d<(4);d++){
    for(i=(1);i<(N);i++){
      nx = hx + dx[d] * i;
      ny = hy + dy[d] * i;
      if(nx < 0 || ny < 0 || nx >= N || ny >= N){
        break;
      }
      if( (!(nx==x[id] && ny==y[id])) && mp[nx][ny] != -1 ){
        break;
      }
      ds[nx][ny] = 0;
      q[qe++] = nx*N+ny;
    }
  }
  while(qs < qe){
    t = q[qs++];
    sx = t/N;
    sy = t%N;
    for(d=(0);d<(4);d++){
      nx = sx + dx[d];
      ny = sy + dy[d];
      if(0 <= nx  &&  nx < N && 0 <= ny  &&  ny < N && ds[nx][ny] == 1073709056){
        if( (!(nx==x[id] && ny==y[id])) && mp[nx][ny] != -1 ){
          continue;
        }
        ds[nx][ny] = ds[sx][sy] + 1;
        q[qe++] = nx * N + ny;
      }
    }
  }
  if(ds[x[id]][y[id]] == 1073709056){
    return 0;
  }
  while(x[id] >= 0){
    sx = x[id];
    sy = y[id];
    if(ds[sx][sy] == 0){
      ddx = hx - sx;
      ddy = hy - sy;
      for(d=(0);d<(4);d++){
        if(ddx * dx[d] + ddy * dy[d] > 0){
          id_roll(mp, cx, cy, id, type, x, y, d);
          break;
        }
      }
      continue;
    }
    for(d=(0);d<(4);d++){
      nx = sx + dx[d];
      ny = sy + dy[d];
      if(0 <= nx  &&  nx < N && 0 <= ny  &&  ny < N && ds[nx][ny] < ds[sx][sy]){
        break;
      }
    }
    assert(d < 4);
    id_move(mp, cx, cy, id, type, x, y, d);
  }
  return x[id] < 0;
}
int calc(int sz, int obj[], int com[], int cdi[]){
  int i;
  int j;
  int k;
  int ok = 0;
  int n_crystal[M] = {};
  int n_c = 0;
  int n_rock = 0;
  int hx[M];
  int hy[M];
  int cx;
  int cy;
  int id;
  int nx;
  int ny;
  static int x[1000000];
  static int y[1000000];
  static int type[1000000];
  vector<vector<int>> mp(N, vector<int>(N));
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      mp[i][j] = -1;
    }
  }
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      if(A[i][j] == 'A'){
        cx = i;
        cy = j;
      }
    }
  }
  for(k=(0);k<(M);k++){
    for(i=(0);i<(N);i++){
      for(j=(0);j<(N);j++){
        if(A[i][j] == 'A' + k){
          mp[i][j] = -2;
          hx[k] = i;
          hy[k] = j;
        }
      }
    }
  }
  id = 0;
  for(k=(0);k<(M);k++){
    for(i=(0);i<(N);i++){
      for(j=(0);j<(N);j++){
        if(A[i][j] == 'a' + k){
          n_c++;
          n_crystal[k]++;
          mp[i][j] = id;
          x[id] = i;
          y[id] = j;
          type[id] = k;
          id++;
        }
      }
    }
  }
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      if(A[i][j] == '@'){
        n_rock++;
        mp[i][j] = id;
        x[id] = i;
        y[id] = j;
        type[id] = -1;
        id++;
      }
    }
  }
  tmps = 0;
  for(k=(0);k<(sz);k++){
    for(i=(0);i<(id);i++){
      if(x[i] >= 0 && type[i] >= 0){
        break;
      }
    }
    if(i==id){
      ok = 1;
      break;
    }
    if(obj[k] == -1){
      my_move(mp, cx, cy, cdi[k]);
    }
    else{
      int s_id;
      int s_type;
      int s_dir;
      s_id = obj[k];
      if(s_id == -20 && n_rock == 0){
        s_id = -10;
      }
      if(s_id == -10){
        s_id = calc_id(mp, cx, cy, x, y, 0, n_c);
      }
      if(s_id == -20){
        s_id = calc_id(mp, cx, cy, x, y, n_c, n_c+n_rock);
      }
      if(s_id == -30){
        s_id = calc_id(mp, cx, cy, x, y, 0, n_c+n_rock);
      }
      s_type = type[s_id];
      s_dir = cdi[k];
      if(s_dir < 0){
        s_dir = calc_dir(mp, cx, cy, s_id, s_type, x, y, s_dir);
      }
      if(com[k]==0){
        id_fall(mp, cx, cy, s_id, s_type, x, y);
      }
      if(com[k]==1){
        id_move(mp, cx, cy, s_id, s_type, x, y, s_dir);
      }
      if(com[k]==2){
        id_roll(mp, cx, cy, s_id, s_type, x, y, s_dir);
      }
    }
  }
  if(!ok){
    int jHgOtDlD;
    for(jHgOtDlD=(0);jHgOtDlD<(20);jHgOtDlD++){
      for(k=(0);k<(id);k++){
        if(x[k] >= 0 && type[k] >= 0){
          id_fall(mp, cx, cy, k, type[k], x, y);
        }
      }
      for(i=(0);i<(id);i++){
        if(x[i] >= 0 && type[i] >= 0){
          break;
        }
      }
      if(i==id){
        ok = 1;
        break;
      }
    }
  }
  if(!ok){
    int H_Qz1srm;
    for(H_Qz1srm=(0);H_Qz1srm<(20);H_Qz1srm++){
      for(k=(0);k<(id);k++){
        if(x[k] >= 0){
          id_fall(mp, cx, cy, k, type[k], x, y);
        }
      }
      for(i=(0);i<(id);i++){
        if(x[i] >= 0 && type[i] >= 0){
          break;
        }
      }
      if(i==id){
        ok = 1;
        break;
      }
    }
  }
  if(ok && ress > tmps){
    ress = tmps;
    for(i=(0);i<(ress);i++){
      resa[i] = tmpa[i];
    }
    for(i=(0);i<(ress);i++){
      resd[i] = tmpd[i];
    }
  }
  if(!ok){
    return 1000000;
  }
  return tmps;
}
double solver(){
  timer.set();
  ress = 100000;
  rd(N);
  rd(M);
  {
    int X085YO4R;
    int QcZ5MdGu;
    for(X085YO4R=(0);X085YO4R<(N);X085YO4R++){
      for(QcZ5MdGu=(0);QcZ5MdGu<(N);QcZ5MdGu++){
        rd(A[X085YO4R][QcZ5MdGu]);
      }
    }
  }
  int i;
  int j;
  int k;
  int id;
  int n_crystal[M] = {};
  int n_rock = 0;
  int n_c = 0;
  double score;
  double p;
  double q;
  int tmp_cost;
  int nx_cost;
  static int sz;
  static int obj[1000000];
  static int com[1000000];
  static int cdi[1000000];
  static int ind[1000000];
  static int mem_obj[1000000];
  static int mem_com[1000000];
  static int mem_cdi[1000000];
  for(k=(0);k<(M);k++){
    for(i=(0);i<(N);i++){
      for(j=(0);j<(N);j++){
        if(A[i][j] == 'a' + k){
          n_crystal[k]++;
          n_c++;
        }
      }
    }
  }
  for(i=(0);i<(N);i++){
    for(j=(0);j<(N);j++){
      if(A[i][j] == '@'){
        n_rock++;
      }
    }
  }
  sz = 0;
  id = 0;
  for(k=(0);k<(M);k++){
    for(j=(0);j<(n_crystal[k]);j++){
      for(i=(0);i<(20);i++){
        arrInsert(sz, sz, obj, id, com, 0, cdi, -1);
      }
      for(i=(0);i<(1);i++){
        arrInsert(sz, sz, obj, id, com, 1, cdi, rnd.get(4));
      }
      for(i=(0);i<(1);i++){
        arrInsert(sz, sz, obj, id, com, 2, cdi, rnd.get(4));
      }
      id++;
    }
  }
  for(j=(0);j<(n_rock);j++){
    for(i=(0);i<(1);i++){
      arrInsert(sz, sz, obj, id, com, 0, cdi, -1);
    }
    for(i=(0);i<(1);i++){
      arrInsert(sz, sz, obj, id, com, 1, cdi, rnd.get(4));
    }
    for(i=(0);i<(2);i++){
      arrInsert(sz, sz, obj, id, com, 2, cdi, rnd.get(4));
    }
    id++;
  }
  for(k=(0);k<(n_c);k++){
    for(i=(0);i<(20);i++){
      arrInsert(sz, sz, obj, -10, com, 0, cdi, -1);
    }
    for(i=(0);i<(2);i++){
      arrInsert(sz, sz, obj, -10, com, 1, cdi, rnd.get(-3,-1));
    }
    for(i=(0);i<(6);i++){
      arrInsert(sz, sz, obj, -10, com, 2, cdi, rnd.get(-3,-1));
    }
  }
  for(k=(0);k<(n_rock);k++){
    for(i=(0);i<(1);i++){
      arrInsert(sz, sz, obj, -20, com, 0, cdi, rnd.get(-3,-1));
    }
    for(i=(0);i<(1);i++){
      arrInsert(sz, sz, obj, -20, com, 1, cdi, rnd.get(-3,-1));
    }
    for(i=(0);i<(4);i++){
      arrInsert(sz, sz, obj, -20, com, 2, cdi, rnd.get(-3,-1));
    }
  }
  for(k=(0);k<(n_c+n_rock);k++){
    for(i=(0);i<(10);i++){
      arrInsert(sz, sz, obj, -30, com, 0, cdi, -1);
    }
  }
  for(i=(0);i<(sz);i++){
    ind[i] = rnd.get(1000000000);
  }
  sortA(sz, ind, obj, com, cdi);
  tmp_cost = calc(sz, obj, com, cdi);
  for(;;){
    int DQE7Sh4i;
    double t;
    t = (TL - timer.get()) / TL;
    if(t < 0){
      break;
    }
    for(i=(0);i<(sz);i++){
      mem_obj[i] = obj[i];
      mem_com[i] = com[i];
      mem_cdi[i] = cdi[i];
    }
    int loop = 6;
    if(t > 0.5){
      loop = 30;
    }
    else if(t > 0.3){
      loop = 12;
    }
    for(DQE7Sh4i=(0);DQE7Sh4i<(loop);DQE7Sh4i++){
      p = rnd.getUni();
      if(p < 0.3){
        i = j = rnd.get(sz);
        while(i == j){
          j = rnd.get(sz);
        }
        swap(obj[i], obj[j]);
        swap(com[i], com[j]);
        swap(cdi[i], cdi[j]);
      }
      else if(p < 0.6){
        i = rnd.get(sz);
        if(obj[i] == -1){
          i = rnd.get(sz);
        }
        if(obj[i] == -1){
          continue;
        }
        q = rnd.getUni();
        if(q < 0.3){
          obj[i] = -10;
        }
        else if(q < 0.4){
          obj[i] = -20;
        }
        else if(q < 0.7){
          obj[i] = -30;
        }
        else if(q < 0.9){
          obj[i] = rnd.get(n_c);
        }
        else if(q < 1.0){
          obj[i] = rnd.get(n_c+n_rock);
        }
      }
      else if(p < 0.7){
        i = rnd.get(sz);
        while(cdi[i] == -1){
          i = rnd.get(sz);
        }
        if(obj[i] == -1){
          cdi[i] = rnd.get(4);
        }
        if(obj[i] != -1){
          cdi[i] = rnd.get(-3,3);
        }
      }
      else{
        i = rnd.get(sz);
        q = rnd.getUni();
        if(q < 0.0){
          obj[i] = -1;
          cdi[i] = rnd.get(4);
        }
        else if(q < 0.5){
          obj[i] = rnd.get(n_c);
          com[i] = 0;
          cdi[i] = -1;
        }
        else if(q < 0.6){
          obj[i] = rnd.get(n_c);
          com[i] = 1;
          cdi[i] = rnd.get(-3,3);
        }
        else if(q < 0.7){
          obj[i] = rnd.get(n_c);
          com[i] = 2;
          cdi[i] = rnd.get(-3,3);
        }
        else if(q < 0.8 && n_rock > 0){
          obj[i] = n_c + rnd.get(n_rock);
          com[i] = 0;
          cdi[i] = -1;
        }
        else if(q < 0.9 && n_rock > 0){
          obj[i] = n_c + rnd.get(n_rock);
          com[i] = 1;
          cdi[i] = rnd.get(-3,3);
        }
        else if(q < 1.0 && n_rock > 0){
          obj[i] = n_c + rnd.get(n_rock);
          com[i] = 2;
          cdi[i] = rnd.get(-3,3);
        }
        else{
        }
      }
    }
    nx_cost = calc(sz, obj, com, cdi);
    if(nx_cost <= tmp_cost || exp( (nx_cost-tmp_cost) / t * 0.01 ) < rnd.getUni()){
      tmp_cost = nx_cost;
    }
    else{
      for(i=(0);i<(sz);i++){
        obj[i] = mem_obj[i];
        com[i] = mem_com[i];
        cdi[i] = mem_cdi[i];
      }
    }
  }
  if(ress > 10000){
    score = 0;
    ress = 0;
  }
  else{
    score = 1e6 * (1 + log(10000.0/ress) / log(2));
  }
  if(LOCAL==0){
    for(i=(0);i<(ress);i++){
      wt_L(resa[i]);
      wt_L(' ');
      wt_L(dirstr[resd[i]]);
      wt_L('\n');
    }
  }
  return score;
}
int main(){
  wmem = memarr;
  if(LOCAL){
    int i;
    double score = 0;
    double s;
    for(i=(0);i<(TEST_CASE);i++){
      s = solver();
      score += s;
      fprintf(stderr, "CASE %d: %f: %f\n", i, s, score);
    }
    fprintf(stderr, "SCORE %f\n", score);
    fprintf(stderr, "SCORE %f * 1e6 (150 cases)\n", score*150/1e6/TEST_CASE);
  }
  else{
    double score;
    score = solver();
    fprintf(stderr, "SCORE %f\n", score);
  }
  return 0;
}
template<class T> inline void wt_L(const vector<T> &x){
  int fg = 0;
  for(auto a : x){
    if(fg){
      my_putchar_unlocked(' ');
    }
    fg = 1;
    wt_L(a);
  }
}
template<class T> inline void wt_L(const set<T> &x){
  int fg = 0;
  for(auto a : x){
    if(fg){
      my_putchar_unlocked(' ');
    }
    fg = 1;
    wt_L(a);
  }
}
template<class T> inline void wt_L(const multiset<T> &x){
  int fg = 0;
  for(auto a : x){
    if(fg){
      my_putchar_unlocked(' ');
    }
    fg = 1;
    wt_L(a);
  }
}
template<class T1, class T2> inline void wt_L(const pair<T1,T2> x){
  wt_L(x.first);
  my_putchar_unlocked(' ');
  wt_L(x.second);
}
// cLay version 20250224-1

// --- original code ---
// const int LOCAL = 0;
// const int TEST_CASE = 30;
// const double TL = 1.99;
// 
// Timer2 timer;
// Rand rnd;
// 
// int N, M;
// char A[20][20];
// 
// char dirstr[6] = "UDLR";
// int dx[4] = {-1,1,0,0}, dy[4] = {0,0,-1,1};
// 
// int ress, resa[1d6], resd[1d6];
// int tmps, tmpa[1d6], tmpd[1d6];
// 
// 
// inline int calc_dist(int x1, int y1, int x2, int y2){
//   return abs(x1-x2) + abs(y1-y2);
// }
// 
// 
// inline int calc_id(VVI &mp, int &cx, int &cy, int x[], int y[], int a, int b){
//   int i, j, t, res = a, d = int_inf;
// 
//   rep(i,a,b){
//     if(x[i] < 0) continue;
//     t = calc_dist(cx, cy, x[i], y[i]);
//     if(d > t) d = t, res= i;
//   }
//   return res;
// }
// 
// inline int calc_dir(VVI &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
//   int i, j, k;
//   int hx, hy, d = int_inf, di, t, ddx, ddy, res = 0;
// 
//   if(dir==-4) return calc_dir(mp, cx, cy, id, type, x, y, -1)^1;
//   if(dir==-5) return calc_dir(mp, cx, cy, id, type, x, y, -2)^1;
//   if(dir==-6) return calc_dir(mp, cx, cy, id, type, x, y, -3)^1;
// 
//   rep(i,N) rep(j,N) if(mp[i][j]==-2){
//     if(type != -1 && A[i][j] != 'A'+type) continue;
//     t = calc_dist(i,j,x[id],y[id]);
//     if(d > t) d = t, hx = i, hy = j;
//   }
// 
//   ddx = hx - i;
//   ddy = hy - j;
//   if(dir == -1) ddy = 0;
//   if(dir == -2) ddx = 0;
// 
//   di = 0;
//   rep(d,4){
//     t = ddx * dx[d] + ddy * dy[d];
//     if(t > di) di = t, res = d;
//   }
// 
//   return res;
// }
// 
// int my_move(VVI &mp, int &cx, int &cy, int dir){
//   int nx, ny;
//   nx = cx + dx[dir];
//   ny = cy + dy[dir];
//   if(nx < 0 || ny < 0 || nx >= N || ny >= N) return 0;
// 
//   arrInsert(tmps,tmps,tmpa,1,tmpd,dir);
//   cx = nx;
//   cy = ny;
// 
//   return 1;
// }
// 
// int my_move(VVI &mp, int &cx, int &cy, int tx, int ty){
//   int d, nx, ny;
//   rep(d,4){
//     for(;;){
//       nx = cx + dx[d];
//       ny = cy + dy[d];
//       if(nx < 0 || ny < 0 || nx >= N || ny >= N || abs(cx-tx)+abs(cy-ty) <= abs(nx-tx)+abs(ny-ty)) break;
//       my_move(mp, cx, cy, d);
//     }
//   }
//   return 1;
// }
// 
// int id_move(VVI &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
//   int rx, ry, nx, ny;
// 
//   rx = x[id];
//   ry = y[id];
//   if(rx < 0) return 0;
// 
//   nx = rx + dx[dir];
//   ny = ry + dy[dir];
//   if(nx < 0 || ny < 0 || nx >= N || ny >= N) return 0;
//   if(mp[nx][ny] >= 0) return 0;
//   if(mp[nx][ny] == -2 && (type != -1 && A[nx][ny] != 'A'+type)) return 0;
// 
//   my_move(mp, cx, cy, rx, ry);
// 
//   arrInsert(tmps,tmps,tmpa,2,tmpd,dir);
//   cx = nx;
//   cy = ny;
// 
//   mp[rx][ry] = -1;
//   if(mp[nx][ny] != -2){
//     mp[nx][ny] = id;
//     x[id] = nx;
//     y[id] = ny;
//   } else {
//     x[id] = y[id] = -1;
//   }
//   return 1;
// }
// 
// int id_roll(VVI &mp, int &cx, int &cy, int id, int type, int x[], int y[], int dir){
//   int i, j, k;
//   int sx, sy, nx, ny, tnx, tny;
//   int valid = 1;
// 
//   nx = sx = x[id];
//   ny = sy = y[id];
//   if(sx < 0) return 0;
// 
//   for(;;){
//     tnx = nx + dx[dir];
//     tny = ny + dy[dir];
//     if(tnx < 0 || tny < 0 || tnx >= N || tny >= N) break;
//     if(mp[tnx][tny] >= 0) break;
//     if(mp[tnx][tny] == -2){
//       if(type==-1 || A[tnx][tny]=='A'+type) nx = tnx, ny = tny, break;
//       return 0;
//     }
//     nx = tnx; ny = tny;
//   }
// 
//   if(nx == sx && ny == sy) return 0;
// 
//   my_move(mp, cx, cy, sx, sy);
// 
//   arrInsert(tmps,tmps,tmpa,3,tmpd,dir);
//   mp[sx][sy] = -1;
//   if(mp[nx][ny] != -2){
//     mp[nx][ny] = id;
//     x[id] = nx;
//     y[id] = ny;
//   } else {
//     x[id] = y[id] = -1;
//   }
// 
//   return 1;
// }
// 
// int id_fall(VVI &mp, int &cx, int &cy, int id, int type, int x[], int y[]){
//   int i, j, k;
//   int hx, hy, dist, t, px, py, sx, sy, nx, ny, ddx, ddy;
//   static int ds[20][20], q[400], qs, qe;
// 
//   dist = int_inf;
//   rep(i,N) rep(j,N) if(mp[i][j] == -2){
//     if(type != -1 && A[i][j] != 'A'+type) continue;
//     t = abs(i - x[id]) + abs(j - y[id]);
//     if(dist > t) dist = t, hx = i, hy = j;
//   }
//   if(dist == int_inf) return 0;
// 
//   rep(i,N) rep(j,N) ds[i][j] = int_inf;
//   ds[hx][hy] = 0;
//   qs = qe = 0;
//   q[qe++] = hx*N+hy;
// 
//   rep(d,4) rep(i,1,N){
//     nx = hx + dx[d] * i;
//     ny = hy + dy[d] * i;
//     if(nx < 0 || ny < 0 || nx >= N || ny >= N) break;
//     if( (!(nx==x[id] && ny==y[id])) && mp[nx][ny] != -1 ) break;
//     ds[nx][ny] = 0;
//     q[qe++] = nx*N+ny;
//   }
// 
//   while(qs < qe){
//     t = q[qs++];
//     sx = t/N;
//     sy = t%N;
//     rep(d,4){
//       nx = sx + dx[d];
//       ny = sy + dy[d];
//       if(0 <= nx < N && 0 <= ny < N && ds[nx][ny] == int_inf){
//         if( (!(nx==x[id] && ny==y[id])) && mp[nx][ny] != -1 ) continue;
//         ds[nx][ny] = ds[sx][sy] + 1;
//         q[qe++] = nx * N + ny;
//       }
//     }
//   }
//   if(ds[x[id]][y[id]] == int_inf) return 0;
// 
//   while(x[id] >= 0){
//     sx = x[id];
//     sy = y[id];
//     if(ds[sx][sy] == 0){
//       ddx = hx - sx;
//       ddy = hy - sy;
//       rep(d,4){
//         if(ddx * dx[d] + ddy * dy[d] > 0){
//           id_roll(mp, cx, cy, id, type, x, y, d);
//           break;
//         }
//       }
//       continue;
//     }
//     rep(d,4){
//       nx = sx + dx[d];
//       ny = sy + dy[d];
//       if(0 <= nx < N && 0 <= ny < N && ds[nx][ny] < ds[sx][sy]) break;
//     }
//     assert(d < 4);
//     id_move(mp, cx, cy, id, type, x, y, d);
//   }
// 
//   return x[id] < 0;
// }
// 
// int calc(int sz, int obj[], int com[], int cdi[]){
//   int i, j, k, ok = 0;
//   int n_crystal[M] = {}, n_c = 0, n_rock = 0;
// 
//   int hx[M], hy[M];
//   int cx, cy, id, nx, ny;
//   static int x[1d6], y[1d6], type[1d6];
//   VVI mp(N, VI(N));
// 
//   rep(i,N) rep(j,N) mp[i][j] = -1;
//   rep(i,N) rep(j,N) if(A[i][j] == 'A') cx = i, cy = j;
//   rep(k,M) rep(i,N) rep(j,N) if(A[i][j] == 'A' + k) mp[i][j] = -2, hx[k] = i, hy[k] = j;
// 
//   // wt("--cx", cx,cy);
// 
//   id = 0;
//   rep(k,M) rep(i,N) rep(j,N) if(A[i][j] == 'a' + k){
//     n_c++;
//     n_crystal[k]++;
//     mp[i][j] = id;
//     x[id] = i;
//     y[id] = j;
//     type[id] = k;
//     id++;
//   }
//   rep(i,N) rep(j,N) if(A[i][j] == '@'){
//     n_rock++;
//     mp[i][j] = id;
//     x[id] = i;
//     y[id] = j;
//     type[id] = -1;
//     id++;
//   }
// 
// 
//   tmps = 0;
//   rep(k,sz){
// 
//     rep(i,id) if(x[i] >= 0 && type[i] >= 0) break;
//     if(i==id) ok = 1, break;
// 
//     if(obj[k] == -1){
//       my_move(mp, cx, cy, cdi[k]);
//     } else {
//       int s_id, s_type, s_dir;
//       s_id = obj[k];
//       if(s_id == -20 && n_rock == 0) s_id = -10;
//       if(s_id == -10) s_id = calc_id(mp, cx, cy, x, y, 0, n_c);
//       if(s_id == -20) s_id = calc_id(mp, cx, cy, x, y, n_c, n_c+n_rock);
//       if(s_id == -30) s_id = calc_id(mp, cx, cy, x, y, 0, n_c+n_rock);
//       s_type = type[s_id];
//       s_dir = cdi[k];
//       if(s_dir < 0) s_dir = calc_dir(mp, cx, cy, s_id, s_type, x, y, s_dir);
//       if(com[k]==0) id_fall(mp, cx, cy, s_id, s_type, x, y);
//       if(com[k]==1) id_move(mp, cx, cy, s_id, s_type, x, y, s_dir);
//       if(com[k]==2) id_roll(mp, cx, cy, s_id, s_type, x, y, s_dir);
//     }
//   }
// 
//   if(!ok){
//     rep(20){
//       rep(k,id) if(x[k] >= 0 && type[k] >= 0){
//         id_fall(mp, cx, cy, k, type[k], x, y);
//       }
//       rep(i,id) if(x[i] >= 0 && type[i] >= 0) break;
//       if(i==id) ok = 1, break;
//     }
//   }
// 
//   if(!ok){
//     rep(20){
//       rep(k,id) if(x[k] >= 0){
//         id_fall(mp, cx, cy, k, type[k], x, y);
//       }
//       rep(i,id) if(x[i] >= 0 && type[i] >= 0) break;
//       if(i==id) ok = 1, break;
//     }
//   }
// 
//   // wt("---");
//   // wt(mp(N,N));
// 
//   if(ok && ress > tmps){
//     ress = tmps;
//     rep(i,ress) resa[i] = tmpa[i];
//     rep(i,ress) resd[i] = tmpd[i];
//   }
// 
//   if(!ok) return 1000000;
//   return tmps;
// }
// 
// double solver(){
//   timer.set();
//   ress = 1d5;
// 
//   rd(N,M,A(N,N));
// 
//   int i, j, k, id;
//   int n_crystal[M] = {}, n_rock = 0, n_c = 0;
//   double score, p, q;
// 
//   int tmp_cost, nx_cost;
//   static int sz, obj[1d6], com[1d6], cdi[1d6], ind[1d6];
//   static int mem_obj[1d6], mem_com[1d6], mem_cdi[1d6];
// 
//   /*
//     obj = -1 自分
//       com = 1: 1マス移動
//     obj = id 鉱石,岩
//       com = 0: そこに移動して,1マス移動で穴に落とせるなら頑張って落とす
//       com = 1: そこに移動して1マス移動
//       com = 2: そこに移動して転がす
// 
//     dir = -1 : 穴の方向の縦
//     dir = -2 : 穴の方向の横
//     dir = -3 : 穴の方向の縦横遠い方
//     
//     obj = -10 : 近い鉱石
//     obj = -20 : 近い岩
//     obj = -30 : 近い鉱石か岩
//   */
// 
//   rep(k,M) rep(i,N) rep(j,N) if(A[i][j] == 'a' + k) n_crystal[k]++, n_c++;
//   rep(i,N) rep(j,N) if(A[i][j] == '@') n_rock++;
// 
//   sz = 0;
//   // rep(i,10) arrInsert(sz, sz, obj, -1, com, 1, cdi, rnd.get(4));
// 
//   id = 0;
//   rep(k,M) rep(j,n_crystal[k]){
//     rep(i,20) arrInsert(sz, sz, obj, id, com, 0, cdi, -1);
//     rep(i,1) arrInsert(sz, sz, obj, id, com, 1, cdi, rnd.get(4));
//     rep(i,1) arrInsert(sz, sz, obj, id, com, 2, cdi, rnd.get(4));
//     id++;
//   }
//   rep(j,n_rock){
//     rep(i,1) arrInsert(sz, sz, obj, id, com, 0, cdi, -1);
//     rep(i,1) arrInsert(sz, sz, obj, id, com, 1, cdi, rnd.get(4));
//     rep(i,2) arrInsert(sz, sz, obj, id, com, 2, cdi, rnd.get(4));
//     id++;
//   }
//   rep(k,n_c){
//     rep(i,20) arrInsert(sz, sz, obj, -10, com, 0, cdi, -1);
//     rep(i,2) arrInsert(sz, sz, obj, -10, com, 1, cdi, rnd.get(-3,-1));
//     rep(i,6) arrInsert(sz, sz, obj, -10, com, 2, cdi, rnd.get(-3,-1));
//   }
//   rep(k,n_rock){
//     rep(i,1) arrInsert(sz, sz, obj, -20, com, 0, cdi, rnd.get(-3,-1));
//     rep(i,1) arrInsert(sz, sz, obj, -20, com, 1, cdi, rnd.get(-3,-1));
//     rep(i,4) arrInsert(sz, sz, obj, -20, com, 2, cdi, rnd.get(-3,-1));
//   }
//   rep(k,n_c+n_rock){
//     rep(i,10) arrInsert(sz, sz, obj, -30, com, 0, cdi, -1);
//   }
//   rep(i,sz) ind[i] = rnd.get(1d9);
//   sortA(sz, ind, obj, com, cdi);
// 
//   tmp_cost = calc(sz, obj, com, cdi);
//   for(;;){
//     double t;
//     t = (TL - timer.get()) / TL;
//     if(t < 0) break;
// 
//     rep(i,sz){
//       mem_obj[i] = obj[i];
//       mem_com[i] = com[i];
//       mem_cdi[i] = cdi[i];
//     }
// 
//     int loop = 6;
//     if(t > 0.5) loop = 30;
//     else if(t > 0.3) loop = 12;
//     rep(loop){
//       p = rnd.getUni();
//       if(p < 0.3){
//         i = j = rnd.get(sz);
//         while(i == j) j = rnd.get(sz);
//         swap(obj[i], obj[j]);
//         swap(com[i], com[j]);
//         swap(cdi[i], cdi[j]);
//       } else if(p < 0.6){
//         i = rnd.get(sz);
//         if(obj[i] == -1) i = rnd.get(sz);
//         if(obj[i] == -1) continue;
//         q = rnd.getUni();
//         if(q < 0.3) obj[i] = -10;
//         else if(q < 0.4) obj[i] = -20;
//         else if(q < 0.7) obj[i] = -30;
//         else if(q < 0.9) obj[i] = rnd.get(n_c);
//         else if(q < 1.0) obj[i] = rnd.get(n_c+n_rock);
//       } else if(p < 0.7){
//         i = rnd.get(sz);
//         while(cdi[i] == -1) i = rnd.get(sz);
//         if(obj[i] == -1) cdi[i] = rnd.get(4);
//         if(obj[i] != -1) cdi[i] = rnd.get(-3,3);
//       } else {
//         i = rnd.get(sz);
//         q = rnd.getUni();
//         if(q < 0.0){
//           obj[i] = -1;
//           cdi[i] = rnd.get(4);
//         } else if(q < 0.5){
//           obj[i] = rnd.get(n_c);
//           com[i] = 0;
//           cdi[i] = -1;
//         } else if(q < 0.6){
//           obj[i] = rnd.get(n_c);
//           com[i] = 1;
//           cdi[i] = rnd.get(-3,3);
//         } else if(q < 0.7){
//           obj[i] = rnd.get(n_c);
//           com[i] = 2;
//           cdi[i] = rnd.get(-3,3);
//         } else if(q < 0.8 && n_rock > 0){
//           obj[i] = n_c + rnd.get(n_rock);
//           com[i] = 0;
//           cdi[i] = -1;
//         } else if(q < 0.9 && n_rock > 0){
//           obj[i] = n_c + rnd.get(n_rock);
//           com[i] = 1;
//           cdi[i] = rnd.get(-3,3);
//         } else if(q < 1.0 && n_rock > 0){
//           obj[i] = n_c + rnd.get(n_rock);
//           com[i] = 2;
//           cdi[i] = rnd.get(-3,3);
//         } else {
// 
//         }
//       }
//     }
// 
//     nx_cost = calc(sz, obj, com, cdi);
//     if(nx_cost <= tmp_cost || exp( (nx_cost-tmp_cost) / t * 0.01 ) < rnd.getUni()){
//       // fprintf(stderr, "%d -> %d\n", tmp_cost, nx_cost);
//       tmp_cost = nx_cost;
//     } else {
//       rep(i,sz){
//         obj[i] = mem_obj[i];
//         com[i] = mem_com[i];
//         cdi[i] = mem_cdi[i];
//       }
//     }
//   }
// 
//   if(ress > 10000){
//     score = 0;
//     ress = 0;
//   } else {
//     score = 1e6 * (1 + log(10000.0/ress) / log(2));
//   }
//   if(LOCAL==0){
//     rep(i,ress) wt(resa[i], dirstr[resd[i]]);
//   }
//   return score;
// }
// 
// {
//   if(LOCAL){
//     int i;
//     double score = 0, s;
//     rep(i, TEST_CASE){
//       s = solver();
//       score += s;
//       fprintf(stderr, "CASE %d: %f: %f\n", i, s, score);
//     }
//     fprintf(stderr, "SCORE %f\n", score);
//     fprintf(stderr, "SCORE %f * 1e6 (150 cases)\n", score*150/1e6/TEST_CASE);
//   } else {
//     double score;
//     score = solver();
//     fprintf(stderr, "SCORE %f\n", score);
//   }
// }

Submission Info

Submission Time
Task B - Ore Rolling (B)
User LayCurse
Language C++ 23 (gcc 12.2)
Score 743954959
Code Size 48754 Byte
Status AC
Exec Time 1992 ms
Memory 4424 KiB

Compile Error

Main.cpp: In function ‘int sort_helper_getbit(T*) [with T = int]’:
Main.cpp:114:46: warning: unused parameter ‘A’ [-Wunused-parameter]
  114 | template<> inline int sort_helper_getbit(int A[]){
      |                                          ~~~~^~~
Main.cpp: In function ‘int sort_helper_getbit(T*) [with T = unsigned int]’:
Main.cpp:117:51: warning: unused parameter ‘A’ [-Wunused-parameter]
  117 | template<> inline int sort_helper_getbit(unsigned A[]){
      |                                          ~~~~~~~~~^~~
Main.cpp: In function ‘int sort_helper_getbit(T*) [with T = long long int]’:
Main.cpp:120:52: warning: unused parameter ‘A’ [-Wunused-parameter]
  120 | template<> inline int sort_helper_getbit(long long A[]){
      |                                          ~~~~~~~~~~^~~
Main.cpp: In function ‘int sort_helper_getbit(T*) [with T = long long unsigned int]’:
Main.cpp:123:61: warning: unused parameter ‘A’ [-Wunused-parameter]
  123 | template<> inline int sort_helper_getbit(unsigned long long A[]){
      |                                          ~~~~~~~~~~~~~~~~~~~^~~
Main.cpp: In function ‘int sort_helper_getbit(T*) [with T = char]’:
Main.cpp:126:47: warning: unused parameter ‘A’ [-Wunused-parameter]
  126 | template<> inline int sort_helper_getbit(char A[]){
      |                                          ~~~~~^~~
Main.cpp: In function ‘int calc_id(std::vector<std::vector<int> >&, int&, int&, int*, int*, int, int)’:
Main.cpp:778:7: warning: unused variable ‘j’ [-Wunused-variable]
  778 |   int j;
      |       ^
Main.cpp:776:41: warning: unused parameter ‘mp’ [-Wunused-parameter]
  776 | inline int calc_id(vector<vector<int>> &mp, int &cx, int &cy, int x[], int y[], int a, int b){
      |                    ~~~~~~~~~~~~~~~~~~~~~^~
Main.cpp: In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’:
Main.cpp:797:7: warning: unused variable ‘k’ [-Wunused-variable]
  797 |   int k;
      |       ^
Main.cpp: In function ‘int my_move(std::vector<std::vector<int> >&, int&, int&, int)’:
Main.cpp:848:34: warning: unused parameter ‘mp’ [-Wunused-parameter]
  848 | int my_move(vector<vector<int>> &mp, int &cx, int &cy, int dir){
      |             ~~~~~~~~~~~~~~~~~~~~~^~
Main.cpp: In function ‘int id_roll(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’:
Main.cpp:914:7: warning: unused variable ‘i’ [-Wunused-variable]
  914 |   int i;
      |       ^
Main.cpp:915:7: warning: unused variable ‘j’ [-Wunused-variable]
  915 |   int j;
      |       ^
Main.cpp:916:7: warning: unused variable ‘k’ [-Wunused-variable]
  916 |   int k;
      |       ^
Main.cpp:923:7: warning: unused variable ‘valid’ [-Wunused-variable]
  923 |   int valid = 1;
      |       ^~~~~
Main.cpp: In function ‘int id_fall(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*)’:
Main.cpp:969:7: warning: unused variable ‘k’ [-Wunused-variable]
  969 |   int k;
      |       ^
Main.cpp:974:7: warning: unused variable ‘px’ [-Wunused-variable]
  974 |   int px;
      |       ^~
Main.cpp:975:7: warning: unused variable ‘py’ [-Wunused-variable]
  975 |   int py;
      |       ^~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:1080:7: warning: variable ‘hx’ set but not used [-Wunused-but-set-variable]
 1080 |   int hx[M];
      |       ^~
Main.cpp:1081:7: warning: variable ‘hy’ set but not used [-Wunused-but-set-variable]
 1081 |   int hy[M];
      |       ^~
Main.cpp:1085:7: warning: unused variable ‘nx’ [-Wunused-variable]
 1085 |   int nx;
      |       ^~
Main.cpp:1086:7: warning: unused variable ‘ny’ [-Wunused-variable]
 1086 |   int ny;
      |       ^~
Main.cpp: In instantiation of ‘void sortA_1_int_L(int, T*, void*) [with T = unsigned int]’:
Main.cpp:284:16:   required from here
Main.cpp:165:30: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int’ [-Wsign-compare]
  165 |   if(mn < 0 && mx > 0 && (mn < -N || mx > N)){
      |                           ~~~^~~~
Main.cpp:165:41: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int’ [-Wsign-compare]
  165 |   if(mn < 0 && mx > 0 && (mn < -N || mx > N)){
      |                                      ~~~^~~
Main.cpp:168:20: warning: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘int’ [-Wsign-compare]
  168 |   if(ok && mx - mn > N){
      |            ~~~~~~~~^~~
Main.cpp:174:16: warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
  174 |     for(i=(0);i<(mx-mn+1);i++){
      |               ~^~~~~~~~~~
Main.cpp:181:16: warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
  181 |     for(i=(0);i<(mx-mn+1);i++){
      |               ~^~~~~~~~~~
Main.cpp: In instantiation of ‘void sortA_1_int_L(int, T*, void*) [with T = long long unsigned int]’:
Main.cpp:290:16:   required from here
Main.cpp:165:30: warning: comparison of integer expressions of different signedness: ‘long long unsigned int’ and ‘int’ [-Wsign-compare]
  165 |   if(mn < 0 && mx > 0 && (mn < -N || mx > N)){
      |                           ~~~^~~~
Main.cpp:165:41: warning: comparison of integer expressions of different signedness: ‘long long unsigned int’ and ‘int’ [-Wsign-compare]
  165 |   if(mn < 0 && mx > 0 && (mn < -N || mx > N)){
      |                                      ~~~^~~
Main.cpp:168:20: warning: comparison of integer expressions of different signedness: ‘long long unsigned int’ and ‘int’ [-Wsign-compare]
  168 |   if(ok && mx - mn > N){
      |            ~~~~~~~~^~~
Main.cpp:174:16: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long long unsigned int’ [-Wsign-compare]
  174 |     for(i=(0);i<(mx-mn+1);i++){
      |               ~^~~~~~~~~~
Main.cpp:181:16: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long long unsigned int’ [-Wsign-compare]
  181 |     for(i=(0);i<(mx-mn+1);i++){
      |               ~^~~~~~~~~~
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:831:7: warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:796:7: note: ‘j’ was declared here
  796 |   int j;
      |       ^
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:831:7: warning: ‘hy’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:799:7: note: ‘hy’ was declared here
  799 |   int hy;
      |       ^~
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:830:7: warning: ‘hx’ may be used uninitialized [-Wmaybe-uninitialized]
  830 |   ddx = hx - i;
      |   ~~~~^~~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:798:7: note: ‘hx’ was declared here
  798 |   int hx;
      |       ^~
Main.cpp:840:13: warning: ‘hx’ may be used uninitialized [-Wmaybe-uninitialized]
  840 |     t = ddx * dx[d] + ddy * dy[d];
      |         ~~~~^~~~~~~
Main.cpp:798:7: note: ‘hx’ was declared here
  798 |   int hx;
      |       ^~
Main.cpp:831:7: warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp:796:7: note: ‘j’ was declared here
  796 |   int j;
      |       ^
Main.cpp:831:7: warning: ‘hy’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp:799:7: note: ‘hy’ was declared here
  799 |   int hy;
      |       ^~
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’ at Main.cpp:810:20,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:831:7: warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:796:7: note: ‘j’ was declared here
  796 |   int j;
      |       ^
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’ at Main.cpp:810:20,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:831:7: warning: ‘hy’ may be used uninitialized [-Wmaybe-uninitialized]
  831 |   ddy = hy - j;
      |   ~~~~^~~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:799:7: note: ‘hy’ was declared here
  799 |   int hy;
      |       ^~
In function ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’,
    inlined from ‘int calc_dir(std::vector<std::vector<int> >&, int&, int&, int, int, int*, int*, int)’ at Main.cpp:807:20,
    inlined from ‘int calc(int, int*, int*, int*)’ at Main.cpp:1177:25:
Main.cpp:840:13: warning: ‘hx’ may be used uninitialized [-Wmaybe-uninitialized]
  840 |     t = ddx * dx[d] + ddy * dy[d];
      |         ~~~~^~~~~~~
Main.cpp: In function ‘int calc(int, int*, int*, int*)’:
Main.cpp:798:7: note: ‘hx’ was declared here
  798 |   int hx;
      |       ^~

Judge Result

Set Name test_ALL
Score / Max Score 743954959 / 1500000000
Status
AC × 150
Set Name Test Cases
test_ALL test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt, test_0050.txt, test_0051.txt, test_0052.txt, test_0053.txt, test_0054.txt, test_0055.txt, test_0056.txt, test_0057.txt, test_0058.txt, test_0059.txt, test_0060.txt, test_0061.txt, test_0062.txt, test_0063.txt, test_0064.txt, test_0065.txt, test_0066.txt, test_0067.txt, test_0068.txt, test_0069.txt, test_0070.txt, test_0071.txt, test_0072.txt, test_0073.txt, test_0074.txt, test_0075.txt, test_0076.txt, test_0077.txt, test_0078.txt, test_0079.txt, test_0080.txt, test_0081.txt, test_0082.txt, test_0083.txt, test_0084.txt, test_0085.txt, test_0086.txt, test_0087.txt, test_0088.txt, test_0089.txt, test_0090.txt, test_0091.txt, test_0092.txt, test_0093.txt, test_0094.txt, test_0095.txt, test_0096.txt, test_0097.txt, test_0098.txt, test_0099.txt, test_0100.txt, test_0101.txt, test_0102.txt, test_0103.txt, test_0104.txt, test_0105.txt, test_0106.txt, test_0107.txt, test_0108.txt, test_0109.txt, test_0110.txt, test_0111.txt, test_0112.txt, test_0113.txt, test_0114.txt, test_0115.txt, test_0116.txt, test_0117.txt, test_0118.txt, test_0119.txt, test_0120.txt, test_0121.txt, test_0122.txt, test_0123.txt, test_0124.txt, test_0125.txt, test_0126.txt, test_0127.txt, test_0128.txt, test_0129.txt, test_0130.txt, test_0131.txt, test_0132.txt, test_0133.txt, test_0134.txt, test_0135.txt, test_0136.txt, test_0137.txt, test_0138.txt, test_0139.txt, test_0140.txt, test_0141.txt, test_0142.txt, test_0143.txt, test_0144.txt, test_0145.txt, test_0146.txt, test_0147.txt, test_0148.txt, test_0149.txt
Case Name Status Exec Time Memory
test_0000.txt AC 1991 ms 4196 KiB
test_0001.txt AC 1991 ms 4320 KiB
test_0002.txt AC 1991 ms 4328 KiB
test_0003.txt AC 1991 ms 4348 KiB
test_0004.txt AC 1991 ms 4292 KiB
test_0005.txt AC 1991 ms 4200 KiB
test_0006.txt AC 1991 ms 4328 KiB
test_0007.txt AC 1991 ms 4360 KiB
test_0008.txt AC 1991 ms 4320 KiB
test_0009.txt AC 1991 ms 4360 KiB
test_0010.txt AC 1992 ms 4368 KiB
test_0011.txt AC 1991 ms 4368 KiB
test_0012.txt AC 1991 ms 4384 KiB
test_0013.txt AC 1991 ms 4412 KiB
test_0014.txt AC 1991 ms 4404 KiB
test_0015.txt AC 1991 ms 4328 KiB
test_0016.txt AC 1991 ms 4292 KiB
test_0017.txt AC 1991 ms 4408 KiB
test_0018.txt AC 1991 ms 4332 KiB
test_0019.txt AC 1991 ms 4364 KiB
test_0020.txt AC 1991 ms 4332 KiB
test_0021.txt AC 1991 ms 4328 KiB
test_0022.txt AC 1991 ms 4360 KiB
test_0023.txt AC 1991 ms 4316 KiB
test_0024.txt AC 1992 ms 4420 KiB
test_0025.txt AC 1992 ms 4328 KiB
test_0026.txt AC 1991 ms 4408 KiB
test_0027.txt AC 1991 ms 4320 KiB
test_0028.txt AC 1991 ms 4192 KiB
test_0029.txt AC 1991 ms 4324 KiB
test_0030.txt AC 1991 ms 4328 KiB
test_0031.txt AC 1991 ms 4284 KiB
test_0032.txt AC 1991 ms 4324 KiB
test_0033.txt AC 1991 ms 4300 KiB
test_0034.txt AC 1991 ms 4368 KiB
test_0035.txt AC 1991 ms 4376 KiB
test_0036.txt AC 1991 ms 4188 KiB
test_0037.txt AC 1992 ms 4268 KiB
test_0038.txt AC 1991 ms 4416 KiB
test_0039.txt AC 1991 ms 4408 KiB
test_0040.txt AC 1991 ms 4368 KiB
test_0041.txt AC 1991 ms 4372 KiB
test_0042.txt AC 1991 ms 4320 KiB
test_0043.txt AC 1991 ms 4288 KiB
test_0044.txt AC 1991 ms 4332 KiB
test_0045.txt AC 1991 ms 4364 KiB
test_0046.txt AC 1991 ms 4332 KiB
test_0047.txt AC 1991 ms 4328 KiB
test_0048.txt AC 1991 ms 4320 KiB
test_0049.txt AC 1991 ms 4340 KiB
test_0050.txt AC 1991 ms 4304 KiB
test_0051.txt AC 1991 ms 4300 KiB
test_0052.txt AC 1992 ms 4196 KiB
test_0053.txt AC 1991 ms 4288 KiB
test_0054.txt AC 1991 ms 4296 KiB
test_0055.txt AC 1991 ms 4324 KiB
test_0056.txt AC 1991 ms 4272 KiB
test_0057.txt AC 1991 ms 4324 KiB
test_0058.txt AC 1991 ms 4320 KiB
test_0059.txt AC 1991 ms 4360 KiB
test_0060.txt AC 1991 ms 4420 KiB
test_0061.txt AC 1991 ms 4312 KiB
test_0062.txt AC 1991 ms 4416 KiB
test_0063.txt AC 1991 ms 4356 KiB
test_0064.txt AC 1991 ms 4284 KiB
test_0065.txt AC 1991 ms 4284 KiB
test_0066.txt AC 1992 ms 4320 KiB
test_0067.txt AC 1991 ms 4296 KiB
test_0068.txt AC 1991 ms 4300 KiB
test_0069.txt AC 1991 ms 4196 KiB
test_0070.txt AC 1991 ms 4236 KiB
test_0071.txt AC 1991 ms 4288 KiB
test_0072.txt AC 1991 ms 4192 KiB
test_0073.txt AC 1991 ms 4288 KiB
test_0074.txt AC 1991 ms 4324 KiB
test_0075.txt AC 1991 ms 4372 KiB
test_0076.txt AC 1991 ms 4368 KiB
test_0077.txt AC 1991 ms 4372 KiB
test_0078.txt AC 1991 ms 4316 KiB
test_0079.txt AC 1991 ms 4316 KiB
test_0080.txt AC 1991 ms 4272 KiB
test_0081.txt AC 1991 ms 4272 KiB
test_0082.txt AC 1991 ms 4176 KiB
test_0083.txt AC 1991 ms 4360 KiB
test_0084.txt AC 1991 ms 4276 KiB
test_0085.txt AC 1991 ms 4300 KiB
test_0086.txt AC 1991 ms 4320 KiB
test_0087.txt AC 1991 ms 4296 KiB
test_0088.txt AC 1991 ms 4284 KiB
test_0089.txt AC 1991 ms 4204 KiB
test_0090.txt AC 1991 ms 4320 KiB
test_0091.txt AC 1991 ms 4292 KiB
test_0092.txt AC 1991 ms 4364 KiB
test_0093.txt AC 1991 ms 4364 KiB
test_0094.txt AC 1992 ms 4412 KiB
test_0095.txt AC 1991 ms 4328 KiB
test_0096.txt AC 1991 ms 4328 KiB
test_0097.txt AC 1991 ms 4328 KiB
test_0098.txt AC 1991 ms 4320 KiB
test_0099.txt AC 1991 ms 4372 KiB
test_0100.txt AC 1992 ms 4320 KiB
test_0101.txt AC 1991 ms 4404 KiB
test_0102.txt AC 1991 ms 4268 KiB
test_0103.txt AC 1991 ms 4328 KiB
test_0104.txt AC 1991 ms 4296 KiB
test_0105.txt AC 1991 ms 4416 KiB
test_0106.txt AC 1991 ms 4232 KiB
test_0107.txt AC 1991 ms 4412 KiB
test_0108.txt AC 1991 ms 4292 KiB
test_0109.txt AC 1991 ms 4324 KiB
test_0110.txt AC 1991 ms 4288 KiB
test_0111.txt AC 1991 ms 4416 KiB
test_0112.txt AC 1992 ms 4356 KiB
test_0113.txt AC 1991 ms 4240 KiB
test_0114.txt AC 1991 ms 4424 KiB
test_0115.txt AC 1992 ms 4280 KiB
test_0116.txt AC 1992 ms 4328 KiB
test_0117.txt AC 1992 ms 4300 KiB
test_0118.txt AC 1991 ms 4420 KiB
test_0119.txt AC 1991 ms 4320 KiB
test_0120.txt AC 1991 ms 4368 KiB
test_0121.txt AC 1991 ms 4320 KiB
test_0122.txt AC 1991 ms 4316 KiB
test_0123.txt AC 1991 ms 4284 KiB
test_0124.txt AC 1991 ms 4324 KiB
test_0125.txt AC 1991 ms 4420 KiB
test_0126.txt AC 1992 ms 4284 KiB
test_0127.txt AC 1992 ms 4300 KiB
test_0128.txt AC 1991 ms 4276 KiB
test_0129.txt AC 1991 ms 4372 KiB
test_0130.txt AC 1991 ms 4324 KiB
test_0131.txt AC 1991 ms 4288 KiB
test_0132.txt AC 1991 ms 4196 KiB
test_0133.txt AC 1991 ms 4324 KiB
test_0134.txt AC 1992 ms 4364 KiB
test_0135.txt AC 1991 ms 4284 KiB
test_0136.txt AC 1991 ms 4316 KiB
test_0137.txt AC 1991 ms 4372 KiB
test_0138.txt AC 1991 ms 4324 KiB
test_0139.txt AC 1991 ms 4372 KiB
test_0140.txt AC 1991 ms 4416 KiB
test_0141.txt AC 1991 ms 4296 KiB
test_0142.txt AC 1991 ms 4288 KiB
test_0143.txt AC 1991 ms 4328 KiB
test_0144.txt AC 1991 ms 4412 KiB
test_0145.txt AC 1991 ms 4308 KiB
test_0146.txt AC 1991 ms 4408 KiB
test_0147.txt AC 1991 ms 4280 KiB
test_0148.txt AC 1991 ms 4336 KiB
test_0149.txt AC 1991 ms 4292 KiB