Разбор
В первый ящик можно положить любой из шаров. Цвет шара во втором ящике должен отличаться от цвета шара в первом. Поэтому во второй ящик можно положить шар любого из оставшихся цветов. В -ый ящик можно положить шар любого цвета, отличного от цвета шара в -ом ящике.
Таким образом, количество различных вариантов размещения шаров по ящикам равно
Реализация алгоритма
Определим модуль, по которому будут проводиться вычисления.
#define MOD 1000000007
Функция powmod вычисляет значение .
long long powmod(long long x, long long n, long long m) { if (n == 0) return 1; if (n % 2 == 0) return powmod((x * x) % m, n / 2, m); return (x * powmod(x, n - 1, m)) % m; }
Основная часть программы. Читаем входное значение .
scanf("%lld", &n);
Вычисляем и выводим ответ.
res = (powmod(n - 1, n - 1, MOD) * n) % MOD; printf("%d\n", res);
Java реализация
import java.util.*; public class Main { public final static long MOD = 1000000007; static long PowMod(long x, long n, long m) { if (n == 0) return 1; if (n % 2 == 0) return PowMod((x * x) % m, n / 2, m); return (x * PowMod(x, n - 1, m)) % m; } public static void main(String[] args) { Scanner con = new Scanner(System.in); long n = con.nextLong(); long res = (PowMod(n - 1, n - 1, MOD) * n) % MOD; System.out.println(res); con.close(); } }
Python реализация — собственная функция степени
Функция myPow вычисляет значение .
def myPow(x, n, m): if (n == 0): return 1 if (n % 2 == 0): return myPow((x * x) % m, n / 2, m) return (x * myPow(x, n - 1, m)) % m
Основная часть программы. Определим модуль , по которому будем выполнять вычисления.
mod = 10 ** 9 + 7
Читаем входное значение .
n = int(input())
Вычисляем и выводим ответ.
print(n * myPow(n - 1, n - 1, mod) % mod)
Python реализация
Определим модуль , по которому будем выполнять вычисления.
mod = 10 ** 9 + 7
Читаем входное значение .
n = int(input())
Вычисляем и выводим ответ.
print(n * pow(n - 1, n - 1, mod) % mod)