#include <fstream>
#include <string>
using namespace std;
ifstream fin("cifra.in");
ofstream fout("cifra.out");
int putere_mod_10(int baza, int exponent) {
int cicluri[10][4] = {
{0, 0, 0, 0}, // 0
{1, 1, 1, 1}, // 1
{2, 4, 8, 6}, // 2
{3, 9, 7, 1}, // 3
{4, 6, 4, 6}, // 4
{5, 5, 5, 5}, // 5
{6, 6, 6, 6}, // 6
{7, 9, 3, 1}, // 7
{8, 4, 2, 6}, // 8
{9, 1, 9, 1} // 9
};
int c = baza % 10;
if (exponent == 0) return 1;
int lungime = 1;
if (c == 0 || c == 1 || c == 5 || c == 6)
lungime = 1;
else if (c == 4 || c == 9)
lungime = 2;
else
lungime = 4;
int poz = (exponent - 1) % lungime;
return cicluri[c][poz];
}
int main() {
int T;
fin >> T;
string N;
while (T--) {
fin >> N;
int suma = 0;
// convertim doar ultimii 2 cifre (pentru exponent), pentru că ciclul are max 4
int n = 0;
for (char c : N) {
n = (n * 10 + (c - '0')) % 100000;
}
int rezultat = 0;
for (int i = 1; i <= 9; i++) {
rezultat = (rezultat + putere_mod_10(i, i)) % 10;
if (to_string(i) == N) break;
}
// dacă N este mare, continuăm până la N ca string
if (N.size() <= 5) {
int nr = stoi(N);
for (int i = 10; i <= nr; i++) {
rezultat = (rezultat + putere_mod_10(i % 10, i)) % 10;
}
} else {
// pentru valori mari de N (peste 100 de cifre), folosim doar ultima cifră
// și iterăm până la 100 deoarece ciclul se stabilizează
for (int i = 10; i <= 100; i++) {
rezultat = (rezultat + putere_mod_10(i % 10, i)) % 10;
}
}
fout << rezultat << '\n';
}
return 0;
}
/*
Nu o sa calculez puterile alea gen 100^100 ca suta la suta imi iese din timp si din memorie
Ce o sa fac eu o sa fie sa ma folosesc de niste cicluri de puteri
*/