func_code_string: #include <bits/stdc++.h>   using namespace std;   const int Maxn = 320;   const int inf = 2147483647;   const int mod = 1000000007;   int read() {     int x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 )       x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();     return x * f;   }   void upd(int &x, int y) {     x += y;     if (x >= mod) x -= mod;   }   int n, m, X, f[2][Maxn][Maxn];   int main() {     n = read(), m = read(), X = read();     if (n > m) return puts( 0 ), 0;     int now = 0;     memset(f[now], 0, sizeof(f[now]));     f[0][0][0] = 1;     for (int i = 0; i < m; i++) {       now ^= 1;       for (int j = 0; j <= min(i, n) + 1; j++)         for (int k = 0; k <= min(i, n) + 1; k++) f[now][j][k] = 0;       for (int j = 0; j <= min(i, n); j++)         for (int k = 0; k <= min(i, n); k++)           if (f[now ^ 1][j][k]) {             int t = f[now ^ 1][j][k];             if (i + 1 == X) {               upd(f[now][j + 1][k], t);               upd(f[now][j + 1][k + 1], t);             } else {               upd(f[now][j][k], t);               upd(f[now][j + 1][k], t);               if (j > k) upd(f[now][j][k + 1], t);               upd(f[now][j + 1][k + 1], t);             }           }     }     int ans = f[now][n][n];     for (int i = 1; i <= n; i++) ans = (long long)ans * i % mod;     printf( %d , ans);   }   