#![allow(non_snake_case, unused_imports)] use proconio::{fastout, input, marker::*}; #[fastout] fn main() { input! { T: usize, L: [usize; T], } for l in L { let a = (MInt998244353::from_raw(26) * MInt998244353::from_raw(26).pow(l as u64) - 1.into()) / 25.into(); println!("{}", a - 1.into()); } } pub type MInt998244353 = ModInt<998244353>; pub type MInt1000000007 = ModInt<1_000_000_007>; #[derive(Clone, Copy, Eq, PartialEq, Debug)] pub struct ModInt { value: u32, } impl ModInt

{ pub fn value(&self) -> u32 { assert!(self.value < P); return self.value; } pub fn new() -> Self { return Self { value: 0 }; } pub fn from_raw(x: u32) -> Self { return Self { value: x }; } pub fn inv(&self) -> Self { pub fn ext_gcd(a: isize, b: isize) -> (isize, isize) { let mut a_k = a; let mut b_k = b; let mut q_k = a_k / b_k; let mut r_k = a_k % b_k; let mut x_k = 0; let mut y_k = 1; let mut z_k = 1; let mut w_k = -q_k; a_k = b_k; b_k = r_k; while r_k != 0 { q_k = a_k / b_k; r_k = a_k % b_k; a_k = b_k; b_k = r_k; let nx = z_k; let ny = w_k; let nz = x_k - q_k * z_k; let nw = y_k - q_k * w_k; x_k = nx; y_k = ny; z_k = nz; w_k = nw; } (x_k, y_k) } let val = self.value() as isize; let ret = ext_gcd(val, P as isize).0; return Self::from(ret); } pub fn pow(&self, mut x: u64) -> Self { let mut ret = ModInt::from_raw(1); let mut a = self.clone(); while x > 0 { if (x & 1) == 1 { ret = ret * a; } a *= a; x >>= 1; } return ret; } } impl std::ops::Add for ModInt

{ type Output = Self; fn add(self, rhs: Self) -> Self::Output { let mut ret = self.value() + rhs.value(); if ret >= P { ret -= P; } return Self::from_raw(ret); } } impl std::ops::AddAssign for ModInt

{ fn add_assign(&mut self, rhs: Self) { self.value = (self.clone() + rhs).value(); } } impl std::ops::Sub for ModInt

{ type Output = Self; fn sub(self, rhs: Self) -> Self::Output { if self.value() >= rhs.value() { return Self::from_raw(self.value() - rhs.value()); } else { return Self::from_raw(P + self.value() - rhs.value()); } } } impl std::ops::SubAssign for ModInt

{ fn sub_assign(&mut self, rhs: Self) { self.value = (self.clone() - rhs).value(); } } impl std::ops::Mul for ModInt

{ type Output = Self; fn mul(self, rhs: Self) -> Self::Output { let ret = self.value() as usize * rhs.value() as usize; return Self::from(ret); } } impl std::ops::MulAssign for ModInt

{ fn mul_assign(&mut self, rhs: Self) { self.value = (self.clone() * rhs).value(); } } impl std::ops::Div for ModInt

{ type Output = Self; fn div(self, rhs: Self) -> Self::Output { self * rhs.inv() } } impl std::ops::DivAssign for ModInt

{ fn div_assign(&mut self, rhs: Self) { self.value = (self.clone() / rhs).value(); } } impl std::ops::Neg for ModInt

{ type Output = Self; fn neg(self) -> Self::Output { let value = self.value(); return Self { value: P - value }; } } macro_rules! int_from_impl { ($($t: ty), *) => { $( #[allow(unused_comparisons)] impl From<$t> for ModInt

{ fn from(value: $t) -> Self { if value >= 0 { Self { value: (value % P as $t) as u32, } } else { let rem = P as $t + value % P as $t; Self { value: rem as u32 } } } } ) * }; } int_from_impl!(usize, isize, u64, i64, u32, i32, u128, i128); impl Default for ModInt

{ fn default() -> Self { Self { value: 0 } } } impl std::fmt::Display for ModInt

{ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.value) } }