#include <bits/stdc++.h>   using LL = long long;   const LL inf = 1LL << 60;   const int kN = 14;   int a[kN], n;   int delta[kN];   int cnt[1 << kN];   LL f[1 << kN];   int decode(char c) {     if (c >=  0  && c <=  9 ) return c -  0 ;     return c -  a  + 10;   }   char encode(int x) {     if (x < 10) return x +  0 ;     return x - 10 +  a ;   }   LL solve() {     for (int mask = 1; mask < 1 << n; ++mask) {       int p = __builtin_popcount((mask & -mask) - 1);       cnt[mask] = cnt[mask ^ 1 << p] - delta[p];       f[mask] = inf;       if (cnt[mask] < 0 || cnt[mask] >= 16) continue;       for (int i = 0; i < n; ++i)         if (mask >> i & 1) {           int q = cnt[mask ^ 1 << i];           if (q < 0 || q >= 16) continue;           f[mask] =               std::min(f[mask], f[mask ^ 1 << i] + (cnt[mask] * 1LL << 4 * i));         }     }     return f[(1 << n) - 1];   }   int main() {     char str[15];     scanf( %s , str);     n = strlen(str);     for (int i = 0; i < n; ++i) a[i] = decode(str[n - 1 - i]);     LL result = inf;     for (int mask = 0; mask < 1 << n - 1; ++mask) {       bool ok = true;       int sum = 0;       for (int i = 0; i < n; ++i) {         int d = a[i];         if (mask >> i & 1) d -= 16;         if (i && (mask >> i - 1 & 1)) d += 1;         ok &= -16 < d && d < 16;         sum += d;         delta[i] = d;       }       if (ok && sum == 0) result = std::min(result, solve());     }     if (result == inf)       puts( NO );     else {       for (int i = n - 1; i >= 0; --i) putchar(encode(result >> 4 * i & 15));       puts(  );     }   }   