#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int f[257],fac[257],ifac[257];
const long long mod = 1e9+7;
int qpow(int x,int y){
int tamp=1;
while(y){
if(y&1)
tamp=1ll*tamp*x%mod;
x=1ll*x*x%mod;
y>>=1;
}
return tamp;
}
int combination(int n,int m){
return 1ll*ifac[m]*ifac[n-m]%mod*fac[n]%mod;//n!/(m!*(n-m)!)
}
int main(){
int n,k;
cin>>n>>k;
fac[0]=1;
for(int i=1;i<=n;++i){
f[i]=qpow((qpow(k,i)-qpow(k-1,i)+mod)%mod,n);//f[i]表示有i列格子填上了数字,每一列都有1
//qpow(k,i)表示一列中每一格都用1~k填充,即全排列
//qpow(k-1,i)表示一列中每一格都用2~k填充,即这一列没有1
//相减得到这一列定有1,n次方表示n列每一列都定有1
fac[i]=1ll*fac[i-1]*i%mod;//fac[i]表示sum[1,i](f[i])
}
ifac[n]=qpow(fac[n],mod-2);//费马小定理求逆元
for(int i=n-1;i>=0;--i)
ifac[i]=1ll*ifac[i+1]*(i+1)%mod;//ifac[i]=1/((n!*(n-i)!)/n!)
int ans=0;
for(int i=0;i<=n;++i)
ans=(ans+((i&1)?mod-1ll:1ll)*combination(n,i)%mod*qpow(k-1,1ll*n*i)%mod*f[n-i]%mod)%mod;
//容斥,用全排列的情况减去只有1列没有1加上只有2列没有1减去只有3列没有1加上只有4列没有1......
//多集合取交集容斥问题,公式类似二项式定理即ans=sum[0,n]((-1)^i*(C(n,i)(k-1)^(n*i))*f[n-i])
cout<<ans<<endl;
return 0;
}

最新文章

  1. File 类
  2. Nutch主要类代码分析之一(Injector)
  3. V8 引擎的sort算法
  4. Flume OG 与 Flume NG 的区别
  5. baidu
  6. 使用POI插件,提取导出excel的工具类
  7. php mysql 数据库写入与读取取文件
  8. 读取jar包里面的文件
  9. activiti入门2流程引擎API和服务基础设施
  10. java实现的简单词法分析器
  11. IDEA第六章----快捷键
  12. mysql下如何删除本节点下的所有子节点小记
  13. Mabits简单应用 2017.8.3
  14. vue 开发和生产的跨域问题
  15. 深入理解AMQP协议
  16. 一、linux 内核介绍
  17. spring、springMVC、mybatis配置文件
  18. Windows下安装Confluence并破解汉化
  19. Redis入门指南之一(简介)
  20. paysoft 网关出现EntityRef:expecting;的错误。

热门文章

  1. 在java中使用FFmpeg处理视频与音频
  2. python接口自动化测试 - requests库的post请求进行文件上传
  3. springboot 创建子父工程
  4. vue axios使用
  5. vue项目怎么搭建到云服务器上
  6. gulp 搭建静态服务器
  7. Codeforces Round #618 (Div. 1)B(几何,观察规律)
  8. 安装Tengine版本的nginx
  9. SniperOJ-as fast as you can-Writeup
  10. Java进阶学习(1)之类与对象(下)