using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Text; using System.Text.RegularExpressions; using System.Linq; using System.IO; using System.Diagnostics; class Scanner { private readonly char Separator = ' '; private int Index = 0; private string[] Line = new string[0]; public string Next() { if (Index >= Line.Length) { Line = Console.ReadLine().Split(Separator); Index = 0; } var ret = Line[Index]; Index++; return ret; } public int NextInt() { return int.Parse(Next()); } } class Magatro { private readonly int Mod = (int)1e9 + 7; private int N; private long[] F; private void Scan() { N = int.Parse(Console.ReadLine()); } private void ClacF() { F = new long[N+1]; F[0] = 1; for (int i = 1; i <= N; i++) { F[i] = (F[i - 1] * i) % Mod; } } private long Fact(long n) { return F[n]; } private long Pow(long a, long b) { long res = 1; while (b > 0) { if (b % 2 == 1) { res *= a; res %= Mod; } b /= 2; a *= a; a %= Mod; } return res; } private long C(long n, long m) { long bunsi = Fact(n); long bunbo = (Fact(m) * Fact(n - m)) % Mod; long gyakugen = Pow(bunbo, Mod - 2); return (bunsi * gyakugen) % Mod; } public void Solve() { Scan(); ClacF(); long ans = 0; for(int i=1;i<=N;i++) { ans += (C(N, i) * Pow(i, N - i))%Mod; ans %= Mod; } Console.WriteLine(ans); } static public void Main() { new Magatro().Solve(); } }