func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   inline void upmax(T& a, T b) {     if (a < b) a = b;   }   template <class T>   inline void upmin(T& a, T b) {     if (a > b) a = b;   }   const int maxn = 307;   const int maxm = 100007;   const int mod = 1000000007;   const int inf = 0x7fffffff;   const double eps = 1e-7;   typedef int arr[maxn];   typedef int adj[maxm];   inline int fcmp(double a, double b) {     if (fabs(a - b) <= eps) return 0;     if (a < b - eps) return -1;     return 1;   }   inline int add(int a, int b) { return ((long long)a + b) % mod; }   inline int mul(int a, int b) { return ((long long)a * b) % mod; }   inline int dec(int a, int b) { return add(a, mod - b % mod); }   inline int Pow(int a, int b) {     int t = 1;     while (b) {       if (b & 1) t = mul(t, a);       a = mul(a, a), b >>= 1;     }     return t;   }   template <typename Type>   inline Type RD() {     char c = getchar();     Type x = 0, flag = 1;     while (!isdigit(c) && c !=  - ) c = getchar();     if (c ==  - )       flag = -1;     else       x = c -  0 ;     while (isdigit(c = getchar())) x = x * 10 + c -  0 ;     return x * flag;   }   inline char rdch() {     char c = getchar();     while (!isalpha(c)) c = getchar();     return c;   }   int n, m, k;   double C[maxn][maxn], f[maxm];   void input() {     n = RD<int>(), m = RD<int>(), k = RD<int>();     for (int i = 0, _ = n; i <= _; i++) {       C[i][0] = 1;       for (int j = 1, _ = i; j <= _; j++) C[i][j] = C[i - 1][j] + C[i - 1][j - 1];     }     f[0] = 1;     for (int i = 1, _ = k; i <= _; i++)       f[i] = f[i - 1] * (k - i + 1) / (m - i + 1);   }   void solve() {     double ans = 0;     for (int i = 0, _ = n; i <= _; i++) {       for (int j = 0, _ = n; j <= _; j++) {         ans += C[n][i] * C[n][j] * f[(i + j) * n - i * j];         if (ans > 1e99) break;       }       if (ans > 1e99) break;     }     if (ans > 1e99) ans = 1e99;     printf( %.10lf n , ans);   }   int main() {     input();     solve();     return 0;   }   