fork download
  1. from sys import stdin,stdout
  2. def ain():
  3. return map(int,sin().split())
  4. def sin():
  5. return stdin.readline().strip()
  6. def gcd(x,y):
  7. while(y):
  8. x,y=y,x%y
  9. return x
  10.  
  11. def multiply(a, b):
  12. mul = [[0 for x in range(20)]
  13. for y in range(20)];
  14. for i in range(20):
  15. for j in range(20):
  16. for k in range(20):
  17. x=(a[i][k] * b[k][j])%mod
  18. mul[i][j]=(mul[i][j]+x)%mod
  19.  
  20. for i in range(20):
  21. for j in range(20):
  22. a[i][j] = mul[i][j]
  23. return a
  24. def power(F, n,b1):
  25. if(n==1):
  26. return
  27. power(F,n/2,b1)
  28. F = multiply(F, F)
  29. if (n % 2 != 0):
  30. F = multiply(F, b1)
  31. return F
  32. def ans(b,z,b1):
  33. power(b,z,b1)
  34. s=0
  35. for i in range(20):
  36. for j in range(20):
  37. s=(s+b[i][j])%mod
  38. return s
  39. mod=10**9+7
  40. n,m=ain()
  41. if(m==0):
  42. print pow(20,n,mod)
  43. exit()
  44. b=[]
  45. for i in range(m):
  46. b.append(ain())
  47. b.sort()
  48. x=b[0][0]-1
  49. t=1
  50. for i in range(m):
  51. l,r,g=b[i][0],b[i][1],b[i][2]
  52. z=r-l
  53. w=[[0 for r in range(20)] for r in range(20)]
  54. w1=[[0 for r in range(20)] for r in range(20)]
  55. for j in range(1,21):
  56. for k in range(1,21):
  57. if(gcd(j,k)==g):
  58. w[j-1][k-1]=1
  59. w1[j-1][k-1]=1
  60. t=(t*ans(w,z,w1))%mod
  61. if(i!=0):
  62. x+=b[i][0]-b[i-1][1]-1
  63. x+=n-b[m-1][1]
  64. t=(t*pow(20,x,mod))%mod
  65. print t
  66.  
Success #stdin #stdout 0s 23296KB
stdin
3 1
1 2 2
stdout
1260