import Foundation

// MARK: READ INPUTS

func readInt() -> Int {
    Int(readLine()!)!
}

func readInts() -> [Int] {
    readLine()!.split(separator: " ").map { Int($0)! }
}

// MARK: DP

struct DP<Argument: Hashable, Element> {
    var dictionary = [Argument: Element]()

    var expression: (Argument, (Argument) -> Element) -> Element

    init(expression: @escaping (_ argument: Argument, _ note: (Argument) -> Element) -> Element) {
        self.expression = expression
    }

    subscript(_ argument: Argument) -> Element {
        mutating _read {
            if let note = dictionary[argument] {
                yield note
            } else {
                let result = expression(argument) { self[$0] }
                dictionary[argument] = result
                yield result
            }
        }
    }
}

// MARK: SOME EXTENSIONS

extension Dictionary {
    init(_ initialize: (inout Self) -> ()) {
        var dictionary = Self()
        initialize(&dictionary)
        self = dictionary
    }
}

extension SignedNumeric where Self: Comparable {
    var abs: Self {
        return self < .zero ? -self : self
    }
}

extension String {
    init(_ text: String, code: Int) {
        self = "\u{1b}[\(code)m" + text + "\u{1b}[0m"
    }
}

extension Collection {
    func tuple() -> (Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!)
    }
    func tuple() -> (Element, Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!, i.next()!)
    }
    func tuple() -> (Element, Element, Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!, i.next()!, i.next()!)
    }

    func safe(at index: Index) -> Element? {
        self.indices.contains(index) ? self[index] : nil
    }
}

// MARK: MOD

@propertyWrapper
struct Mod {

    let base: Int
    private var store: Int

    var value: Int {
        get { return store }
        set {
            store = newValue % base
            if store < 0 { store += base }
        }
    }

    static var defaultBaseNumber = 1_000_000_007

    init(_ value: Int, base: Int = defaultBaseNumber) {
        self.base = base
        self.store = value % base
        if store < 0 { self.store += base }
    }

    private init(unchecked value: Int, base: Int = defaultBaseNumber) {
        self.store = value
        self.base = base
    }

    init(wrappedValue: Int, base: Int = defaultBaseNumber) {
        self = .init(wrappedValue, base: base)
    }

    var wrappedValue: Int {
        get { return value }
        set { value = newValue }
    }

    var projectedValue: Int { base }
}

extension Mod: ExpressibleByIntegerLiteral {
    init(integerLiteral value: Int) {
        self = .init(value)
    }
}

extension Mod: AdditiveArithmetic, SignedNumeric {

    private static func assert(_ a: Mod, _ b: Mod) {
        Swift.assert(b.base == b.base, "Base should be same number .")
    }

    private static func operate(_ f: @escaping (Int, Int) -> Int) -> (Mod, Mod) -> Mod {
        return { lhs, rhs in
            assert(lhs, rhs)
            let num = f(lhs.value, rhs.value)
            return Mod(num, base: lhs.base)
        }
    }

    static func + (lhs: Mod, rhs: Mod) -> Mod { operate(+)(lhs, rhs) }
    static func - (lhs: Mod, rhs: Mod) -> Mod { operate(-)(lhs, rhs) }
    static func * (lhs: Mod, rhs: Mod) -> Mod { operate(*)(lhs, rhs) }
    static func *= (lhs: inout Mod, rhs: Mod) { lhs = lhs * rhs }

    init?<T>(exactly source: T) where T : BinaryInteger {
        guard let int = Int(exactly: source) else { return nil }
        self = Mod(int)
    }

    var magnitude: Int { value.abs }
}

extension Mod: CustomStringConvertible {
    var description: String {
        let digit = String(base).count
        let string = String(format: "%\(digit)d", value)
        return "Mod(\(string), base: \(base))"
    }
}

extension Mod: Equatable, Comparable {
    static func == (lhs: Mod, rhs: Mod) -> Bool {
        assert(lhs, rhs)
        return lhs.value == rhs.value
    }

    static func < (lhs: Mod, rhs: Mod) -> Bool {
        assert(lhs, rhs)
        return lhs.value < rhs.value
    }
}

extension Mod: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(base)
        hasher.combine(value)
    }
}

extension Mod: Strideable {
    typealias Stride = Int

    func distance(to other: Mod) -> Int {
        return (other - self).value
    }

    func advanced(by n: Int) -> Mod {
        return self + Mod(n, base: base)
    }
}

// MARK: UNION FIND

struct UnionFind {
    var par: [Int]
    init(n: Int) {
        self.par = Array(0...n)
    }

    mutating func root(_ x: Int) -> Int {
        if par[x] == x { return x }
        par[x] = root(par[x])
        return par[x]
    }

    mutating func unite(_ x: Int, _ y: Int) {
        let rx = root(x), ry = root(y)
        if rx == ry { return }
        par[rx] = ry
    }

    mutating func same(_ x: Int, _ y: Int) -> Bool {
        let rx = root(x), ry = root(y)
        return rx == ry
    }

    mutating func size() -> Int {
        var dic = [Int: Int]()
        for i in par {
            dic[root(i), default: 0] += 1
        }
        return dic.values.max() ?? 0
    }
}

extension UnionFind: CustomStringConvertible {
    var description: String { "UnionFind(\(par))" }
}

// MARK: EUCLID
func euclid(_ x: Int, _ y: Int) -> Int {
    var x = x, y = y
    while y != 0 {
        (x, y) = (y, x%y)
    }
    return x
}

/// - Note: O(n)
func euclid(_ x: Int, _ y: Int, _ others: Int...) -> Int {
    var result = euclid(x, y)
    for i in others {
        result = euclid(result, i)
        if result == 1 { break }
    }
    return result
}

/// - Note: O(n)
func euclid(array: [Int]) -> Int {
    guard let first = array.first else { return 1 }
    var result = first
    for i in array {
        result = euclid(result, i)
        if result == 1 { break }
    }
    return result
}

// MARK: SIEVE of ERATOSTHENES
extension Int {
    /// - NOTE: O(n^2)
    func primeFactors() -> Set<Int> {
        guard self > 1 else { return [] }
        var x = self
        let primes = PrimeStore[x]

        // self.isPrime
        if primes.last ?? 0 == x { return [x] }

        var result = Set<Int>()
        for prime in primes {
            while x.isMultiple(of: prime) {
                result.insert(prime)
                x /= prime
            }
            if x == 1 { break }
        }
        return result
    }

    func isPrime() -> Bool {
        PrimeStore[self].last ?? 0 == self
    }
}

// MARK: PRIME
struct PrimeStore {
    private static var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
    private static var searched = 100

    static subscript(_ x: Int) -> [Int] {
        if x <= searched {
            return primes.prefix(while: { $0 <= x })
        }

        var array = Array(searched...x)
        for prime in primes {
            array.removeAll(where: { $0.isMultiple(of: prime) })
        }
        while let prime = array.first {
            primes.append(prime)
            array.removeAll(where: { $0.isMultiple(of: prime) })
        }
        return primes
    }
}

// MARK: -- MAIN

func problem_c(_ an: [Mod]) -> Int {
    var res = Mod(0)
    var sum = an.reduce(0, +)
    for i in an {
        sum -= i
        res += i * sum
    }
    return res.value
}

func heavy_problem_c(_ an: [Mod]) -> Int {
    var res = Mod(0)
    for i in an.indices {
        let under = an[i]
        for j in 0..<i {
            let upper = an[j]
//            print(under.value, "*", upper.value, "=", (under * upper).value)
            res += under * upper
        }
    }
    return res.value
}

func problem_d(n: Int, data: [(Int, Int)]) -> Int {
    var unionFind = UnionFind(n: n)
    for (x, y) in data {
        unionFind.unite(x, y)
    }

    return unionFind.size()
}

enum Coprime: String {
    case pairwise = "pairwise coprime",
         setwise  = "setwise coprime",
         none     = "not coprime"
}

func problem_e(_ an: [Int]) -> Coprime {
//    var isPairwise = true
//    root: for a in an {
//        let primes = a.primeFactors()
//        for prime in primes {
//            for i in an {
//                if a == i { break }
//                if i.isMultiple(of: prime) {
//                    isPairwise = false
//                    break root
//                }
//            }
//        }
//    }
//    if isPairwise { return .pairwise}

    // O(n)
    if euclid(array: an) == 1 { return .setwise }

    return .none
}

func heavy_problem_e(_ an: [Int]) -> Coprime {
    let isPairwise = an.map { i in
        an.map { j in i == j || euclid(i, j) == 1 }
    }.joined().allSatisfy { $0 }
    if isPairwise { return .pairwise }
    if euclid(array: an) == 1 { return .setwise }
    return .none
}

func main() {
    let _ = readInt()
    let an = readInts()
    print(problem_e(an).rawValue)
}

func test(_ n: Int = 10) {
    func judge<T: Equatable>(_ answer: T, expected: T) {
        let success = "SUCCESS: \(answer)"
        let failed  = "FAILED:  \(answer) (expected \(expected))"
        print(answer == expected ? success : String(failed, code: 31))
    }
    func readInput(_ text: String) -> [Int] {
        text.split(separator: "\n")[1].split(separator: " ").map { Int($0)! }
    }

    print("\nexample ===================")
    let ex1 = problem_e(readInput("""
        3
        3 4 5
    """))
    judge(ex1, expected: .pairwise)
    let ex2 = problem_e(readInput("""
        3
        6 10 15
    """))
    judge(ex2, expected: .setwise)
    let ex3 = problem_e(readInput("""
        3
        6 10 16
    """))
    judge(ex3, expected: .none)

    print("\nborder ====================")

    print("\nrandom ====================")
    for _ in 0..<n {
//        let ans = problem_c(an)
//        let hev = heavy_problem_c(an)
//        printResult(ans, expected: hev)
    }
}

main()


import Foundation

// MARK: READ INPUTS

func readInt() -> Int {
    Int(readLine()!)!
}

func readInts() -> [Int] {
    readLine()!.split(separator: " ").map { Int($0)! }
}

// MARK: DP

struct DP<Argument: Hashable, Element> {
    var dictionary = [Argument: Element]()

    var expression: (Argument, (Argument) -> Element) -> Element

    init(expression: @escaping (_ argument: Argument, _ note: (Argument) -> Element) -> Element) {
        self.expression = expression
    }

    subscript(_ argument: Argument) -> Element {
        mutating _read {
            if let note = dictionary[argument] {
                yield note
            } else {
                let result = expression(argument) { self[$0] }
                dictionary[argument] = result
                yield result
            }
        }
    }
}

// MARK: SOME EXTENSIONS

extension Dictionary {
    init(_ initialize: (inout Self) -> ()) {
        var dictionary = Self()
        initialize(&dictionary)
        self = dictionary
    }
}

extension SignedNumeric where Self: Comparable {
    var abs: Self {
        return self < .zero ? -self : self
    }
}

extension String {
    init(_ text: String, code: Int) {
        self = "\u{1b}[\(code)m" + text + "\u{1b}[0m"
    }
}

extension Collection {
    func tuple() -> (Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!)
    }
    func tuple() -> (Element, Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!, i.next()!)
    }
    func tuple() -> (Element, Element, Element, Element) {
        var i = makeIterator()
        return (i.next()!, i.next()!, i.next()!, i.next()!)
    }

    func safe(at index: Index) -> Element? {
        self.indices.contains(index) ? self[index] : nil
    }
}

// MARK: MOD

@propertyWrapper
struct Mod {

    let base: Int
    private var store: Int

    var value: Int {
        get { return store }
        set {
            store = newValue % base
            if store < 0 { store += base }
        }
    }

    static var defaultBaseNumber = 1_000_000_007

    init(_ value: Int, base: Int = defaultBaseNumber) {
        self.base = base
        self.store = value % base
        if store < 0 { self.store += base }
    }

    private init(unchecked value: Int, base: Int = defaultBaseNumber) {
        self.store = value
        self.base = base
    }

    init(wrappedValue: Int, base: Int = defaultBaseNumber) {
        self = .init(wrappedValue, base: base)
    }

    var wrappedValue: Int {
        get { return value }
        set { value = newValue }
    }

    var projectedValue: Int { base }
}

extension Mod: ExpressibleByIntegerLiteral {
    init(integerLiteral value: Int) {
        self = .init(value)
    }
}

extension Mod: AdditiveArithmetic, SignedNumeric {

    private static func assert(_ a: Mod, _ b: Mod) {
        Swift.assert(b.base == b.base, "Base should be same number .")
    }

    private static func operate(_ f: @escaping (Int, Int) -> Int) -> (Mod, Mod) -> Mod {
        return { lhs, rhs in
            assert(lhs, rhs)
            let num = f(lhs.value, rhs.value)
            return Mod(num, base: lhs.base)
        }
    }

    static func + (lhs: Mod, rhs: Mod) -> Mod { operate(+)(lhs, rhs) }
    static func - (lhs: Mod, rhs: Mod) -> Mod { operate(-)(lhs, rhs) }
    static func * (lhs: Mod, rhs: Mod) -> Mod { operate(*)(lhs, rhs) }
    static func *= (lhs: inout Mod, rhs: Mod) { lhs = lhs * rhs }

    init?<T>(exactly source: T) where T : BinaryInteger {
        guard let int = Int(exactly: source) else { return nil }
        self = Mod(int)
    }

    var magnitude: Int { value.abs }
}

extension Mod: CustomStringConvertible {
    var description: String {
        let digit = String(base).count
        let string = String(format: "%\(digit)d", value)
        return "Mod(\(string), base: \(base))"
    }
}

extension Mod: Equatable, Comparable {
    static func == (lhs: Mod, rhs: Mod) -> Bool {
        assert(lhs, rhs)
        return lhs.value == rhs.value
    }

    static func < (lhs: Mod, rhs: Mod) -> Bool {
        assert(lhs, rhs)
        return lhs.value < rhs.value
    }
}

extension Mod: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(base)
        hasher.combine(value)
    }
}

extension Mod: Strideable {
    typealias Stride = Int

    func distance(to other: Mod) -> Int {
        return (other - self).value
    }

    func advanced(by n: Int) -> Mod {
        return self + Mod(n, base: base)
    }
}

// MARK: UNION FIND

struct UnionFind {
    var par: [Int]
    init(n: Int) {
        self.par = Array(0...n)
    }

    mutating func root(_ x: Int) -> Int {
        if par[x] == x { return x }
        par[x] = root(par[x])
        return par[x]
    }

    mutating func unite(_ x: Int, _ y: Int) {
        let rx = root(x), ry = root(y)
        if rx == ry { return }
        par[rx] = ry
    }

    mutating func same(_ x: Int, _ y: Int) -> Bool {
        let rx = root(x), ry = root(y)
        return rx == ry
    }

    mutating func size() -> Int {
        var dic = [Int: Int]()
        for i in par {
            dic[root(i), default: 0] += 1
        }
        return dic.values.max() ?? 0
    }
}

extension UnionFind: CustomStringConvertible {
    var description: String { "UnionFind(\(par))" }
}

// MARK: EUCLID
func euclid(_ x: Int, _ y: Int) -> Int {
    var x = x, y = y
    while y != 0 {
        (x, y) = (y, x%y)
    }
    return x
}

/// - Note: O(n)
func euclid(_ x: Int, _ y: Int, _ others: Int...) -> Int {
    var result = euclid(x, y)
    for i in others {
        result = euclid(result, i)
        if result == 1 { break }
    }
    return result
}

/// - Note: O(n)
func euclid(array: [Int]) -> Int {
    guard let first = array.first else { return 1 }
    var result = first
    for i in array {
        result = euclid(result, i)
        if result == 1 { break }
    }
    return result
}

// MARK: SIEVE of ERATOSTHENES
extension Int {
    /// - NOTE: O(n^2)
    func primeFactors() -> Set<Int> {
        guard self > 1 else { return [] }
        var x = self
        let primes = PrimeStore[x]

        // self.isPrime
        if primes.last ?? 0 == x { return [x] }

        var result = Set<Int>()
        for prime in primes {
            while x.isMultiple(of: prime) {
                result.insert(prime)
                x /= prime
            }
            if x == 1 { break }
        }
        return result
    }

    func isPrime() -> Bool {
        PrimeStore[self].last ?? 0 == self
    }
}

// MARK: PRIME
struct PrimeStore {
    private static var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
    private static var searched = 100

    static subscript(_ x: Int) -> [Int] {
        if x <= searched {
            return primes.prefix(while: { $0 <= x })
        }

        var array = Array(searched...x)
        for prime in primes {
            array.removeAll(where: { $0.isMultiple(of: prime) })
        }
        while let prime = array.first {
            primes.append(prime)
            array.removeAll(where: { $0.isMultiple(of: prime) })
        }
        return primes
    }
}

// MARK: -- MAIN

func problem_c(_ an: [Mod]) -> Int {
    var res = Mod(0)
    var sum = an.reduce(0, +)
    for i in an {
        sum -= i
        res += i * sum
    }
    return res.value
}

func heavy_problem_c(_ an: [Mod]) -> Int {
    var res = Mod(0)
    for i in an.indices {
        let under = an[i]
        for j in 0..<i {
            let upper = an[j]
//            print(under.value, "*", upper.value, "=", (under * upper).value)
            res += under * upper
        }
    }
    return res.value
}

func problem_d(n: Int, data: [(Int, Int)]) -> Int {
    var unionFind = UnionFind(n: n)
    for (x, y) in data {
        unionFind.unite(x, y)
    }

    return unionFind.size()
}

enum Coprime: String {
    case pairwise = "pairwise coprime",
         setwise  = "setwise coprime",
         none     = "not coprime"
}

func problem_e(_ an: [Int]) -> Coprime {
    var _an = an
    for a in _an {
        let primes = a.primeFactors()
        for prime in primes {
            _an.removeAll(where: { $0.isMultiple(of: prime) && $0 != a })
        }
    }
    if _an == an { return .pairwise }

    // O(n)
    if euclid(array: an) == 1 { return .setwise }

    return .none
}

func heavy_problem_e(_ an: [Int]) -> Coprime {
    let isPairwise = an.map { i in
        an.map { j in i == j || euclid(i, j) == 1 }
    }.joined().allSatisfy { $0 }
    if isPairwise { return .pairwise }
    if euclid(array: an) == 1 { return .setwise }
    return .none
}

func main() {
    let _ = readInt()
    let an = readInts()
    print(problem_e(an).rawValue)
}

func test(_ n: Int = 10) {
    func judge<T: Equatable>(_ answer: T, expected: T) {
        let success = "SUCCESS: \(answer)"
        let failed  = "FAILED:  \(answer) (expected \(expected))"
        print(answer == expected ? success : String(failed, code: 31))
    }
    func readInput(_ text: String) -> [Int] {
        text.split(separator: "\n")[1].split(separator: " ").map { Int($0)! }
    }

    print("\nexample ===================")
    let ex1 = problem_e(readInput("""
        3
        3 4 5
    """))
    judge(ex1, expected: .pairwise)
    let ex2 = problem_e(readInput("""
        3
        6 10 15
    """))
    judge(ex2, expected: .setwise)
    let ex3 = problem_e(readInput("""
        3
        6 10 16
    """))
    judge(ex3, expected: .none)

    print("\nborder ====================")

    print("\nrandom ====================")
    for _ in 0..<n {
//        let ans = problem_c(an)
//        let hev = heavy_problem_c(an)
//        printResult(ans, expected: hev)
    }
}

main()


import * as fs from 'fs';

// main
function main(input: string[]) {
    // param
    var n: number = Number(input[0])
    var a: number[] = input[1].split(" ").map(x => Number(x));
    var ans;
    // process
    if (Math_gcdArray(a) != 1) {
        ans = "not coprime";
    } else {
        var c = new Array(Math_max(a) + 1).fill(0);
        for (var ax = 0; ax < a.length; ax++) {
            c[a[ax]] = 1;
        }
        var p = new Array(Math_max(a) + 1).fill(0);
        var cnt = 0;
        for (var px = 2; px < p.length; px++) {
            if (p[px] == 0) {
                for (var pxx = px; pxx < p.length; pxx += px) {
                    p[pxx] = px;
                }
                cnt = 0;
                for (var pxx = px; pxx < p.length; pxx += px) {
                    cnt += c[pxx];
                }
                if (2 <= cnt) break;
            }
        }
        if (2 <= cnt) {
            ans = "setwise coprime"
        } else {
            ans = "pairwise coprime"
        }
    }
    console.log(ans);
}

// entrypoint
function entrypoint() {
    try {
        var input = fs.readFileSync("/dev/stdin", "utf8").trim().split("\n");
        console.debug = function () { };
        main(input);
    }
    catch (ex) {
        console.log("----");
        console.log("file='%s'", __filename.split("\\").slice(-1)[0]);
        console.log("----");
        const lines: string[] = [];
        // @ts-ignore
        const reader = require('readline').createInterface({
            // @ts-ignore
            input: process.stdin,
            // @ts-ignore
            output: process.stdout
        });
        reader.on('line', function (line: string) {
            lines.push(line);
        });
        reader.on('close', function () {
            input = lines;
            console.log("input=%o", input);
            console.time();
            console.log("----")
            main(input);
            console.log("----")
            console.timeEnd();
        });
    }
}
entrypoint();

// library
function Math_max(arr: number[]): number { return arr.reduce((x, y) => Math.max(x, y)); }
function Math_min(arr: number[]): number { return arr.reduce((x, y) => Math.min(x, y)); }
function Math_gcd(): number {
    var ans = arguments[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < arguments.length; i++) {
        ans = f(ans, arguments[i]);
    }
    return ans
};
function Math_gcdArray(values: number[]): number {
    var ans = values[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < values.length; i++) {
        ans = f(ans, values[i]);
    }
    return ans
};
function Math_lcm(): number {
    var a = arguments
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_lcmArray(values: number[]): number {
    var a = values
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_primeList(value: number): number[] {
    var ans = [];
    var arr = new Array(value).fill(0);
    for (var i = 2; i < value; i++) {
        if (arr[i] == 0) {
            for (var j = i; j < value; j += i) {
                if (arr[j] == 0) arr[j] = i;
            }
        }
    }
    for (var i = 2; i < value; i++) {
        if (arr[i] == i) ans.push(i);
    }
    return ans;
}
function Math_primeFactor(p: number[], value: number): number[][] {
    var ans: number[][] = [];
    var valmax = value / 2;;
    for (var i = 0; i < p.length; i++) {
        var prime = p[i];
        if (valmax < prime) break;
        var count = 0;
        while (value % prime == 0) {
            value /= prime;
            count++;
        }
        if (count != 0) {
            ans.push([prime, count]);
        }
        if (value == 1) break;
    }
    return ans;
}


import * as fs from 'fs';

// main
function main(input: string[]) {
    // param
    var n: number;
    var a: number[];
    var ans;
    // init
    n = Number(input[0])
    a = input[1].split(" ").map(x => Number(x));
    // solve
    if (Math_gcdArray(a) != 1) {
        ans = "not coprime";
    } else {
        var c = new Array(Math_max(a) + 1).fill(0);
        for (var ax = 0; ax < a.length; ax++) {
            c[a[ax]] = 1;
        }
        var p = new Array(Math_max(a) + 1).fill(0);
        var cnt = 0;
        for (var px = 2; px < p.length; px++) {
            if (p[px] == 0) {
                for (var pxx = px; pxx < p.length; pxx += px) {
                    p[pxx] = px;
                }
                cnt = 0;
                for (var pxx = px; pxx < p.length; pxx += px) {
                    cnt += c[pxx];
                }
                if (2 <= cnt) break;
            }
        }
        if (2 <= cnt) {
            ans = "setwise coprime"
        } else {
            ans = "pairwise coprime"
        }
    }
    console.log(ans);
}

// math library
function Math_max(arr: number[]): number { return arr.reduce((x, y) => Math.max(x, y)); }
function Math_min(arr: number[]): number { return arr.reduce((x, y) => Math.min(x, y)); }
function Math_gcd(): number {
    var ans = arguments[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < arguments.length; i++) {
        ans = f(ans, arguments[i]);
    }
    return ans
};
function Math_gcdArray(values: number[]): number {
    var ans = values[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < values.length; i++) {
        ans = f(ans, values[i]);
    }
    return ans
};
function Math_lcm(): number {
    var a = arguments
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_lcmArray(values: number[]): number {
    var a = values
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_primeList(value: number): number[] {
    var ans = [];
    var arr = new Array(value).fill(0);
    for (var i = 2; i < value; i++) {
        if (arr[i] == 0) {
            for (var j = i; j < value; j += i) {
                if (arr[j] == 0) arr[j] = i;
            }
        }
    }
    for (var i = 2; i < value; i++) {
        if (arr[i] == i) ans.push(i);
    }
    return ans;
}
function Math_primeFactor(p: number[], value: number): number[][] {
    var ans: number[][] = [];
    var valmax = value / 2;;
    for (var i = 0; i < p.length; i++) {
        var prime = p[i];
        if (valmax < prime) break;
        var count = 0;
        while (value % prime == 0) {
            value /= prime;
            count++;
        }
        if (count != 0) {
            ans.push([prime, count]);
        }
        if (value == 1) break;
    }
    return ans;
}

// union-find library
var g_uf_root: number[];
var g_uf_count: number[];
function UF_initRoot(num: number) {
    g_uf_root = new Array(num).fill(-1);
    g_uf_count = new Array(num).fill(1);
}
function UF_getRoot(index: number) {
    if (g_uf_root[index] < 0) {
        return index;
    } else {
        var work0: number = UF_getRoot(g_uf_root[index]);
        g_uf_root[index] = work0;
        return work0
    }
}
function UF_mergeRoot(a: number, b: number) {
    var root0: number = UF_getRoot(a);
    var root1: number = UF_getRoot(b);
    if (root0 == root1) return;
    if (root0 > root1) [root0, root1] = [root1, root0];
    g_uf_count[root0] += g_uf_count[root1];
    g_uf_count[root1] = 0;
    g_uf_root[root1] = root0;
}

// entrypoint
function entrypoint() {
    try {
        var input = fs.readFileSync("/dev/stdin", "utf8").trim().split("\n");
        console.debug = function () { };
        main(input);
    }
    catch (ex) {
        console.log("----");
        console.log("file='%s'", __filename.split("\\").slice(-1)[0]);
        console.log("----");
        const lines: string[] = [];
        // @ts-ignore
        const reader = require('readline').createInterface({
            // @ts-ignore
            input: process.stdin,
            // @ts-ignore
            output: process.stdout
        });
        reader.on('line', function (line: string) {
            lines.push(line);
        });
        reader.on('close', function () {
            input = lines;
            console.log("input=%o", input);
            console.time();
            console.log("----")
            main(input);
            console.log("----")
            console.timeEnd();
        });
    }
}
entrypoint();


import * as fs from 'fs';

// main
function main(input: string[]) {
    // param
    var n: number = Number(input[0])
    var a: number[] = input[1].split(" ").map(x => Number(x));
    var ans;
    // process
    if (Math_gcdArray(a) != 1) {
        ans = "not coprime";
    } else {
        var p = new Array(Math.floor(Math_max(a) / 2) + 1).fill(0);
        var found = 0;
        loop: {
            for (var px = 2; px < p.length; px++) {
                if (p[px] == 0) {
                    found = 0;
                    for (var pxx = px; pxx < p.length; pxx += px) {
                        p[pxx] = px;
                    }
                    for (var ax = 0; ax < a.length; ax++) {
                        if (a[ax] % px == 0) found++;
                    }
                    if (2 <= found) break loop;
                }
            }
        }
        if (2 <= found) {
            ans = "setwise coprime"
        } else {
            ans = "pairwise coprime"
        }
    }
    console.log(ans);
}

// entrypoint
function entrypoint() {
    try {
        var input = fs.readFileSync("/dev/stdin", "utf8").trim().split("\n");
        console.debug = function () { };
        main(input);
    }
    catch (ex) {
        console.log("----");
        console.log("file='%s'", __filename.split("\\").slice(-1)[0]);
        console.log("----");
        const lines: string[] = [];
        // @ts-ignore
        const reader = require('readline').createInterface({
            // @ts-ignore
            input: process.stdin,
            // @ts-ignore
            output: process.stdout
        });
        reader.on('line', function (line: string) {
            lines.push(line);
        });
        reader.on('close', function () {
            input = lines;
            console.log("input=%o", input);
            console.time();
            console.log("----")
            main(input);
            console.log("----")
            console.timeEnd();
        });
    }
}
entrypoint();

// library
function Math_max(arr: number[]): number { return arr.reduce((x, y) => Math.max(x, y)); }
function Math_min(arr: number[]): number { return arr.reduce((x, y) => Math.min(x, y)); }
function Math_gcd(): number {
    var ans = arguments[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < arguments.length; i++) {
        ans = f(ans, arguments[i]);
    }
    return ans
};
function Math_gcdArray(values: number[]): number {
    var ans = values[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < values.length; i++) {
        ans = f(ans, values[i]);
    }
    return ans
};
function Math_lcm(): number {
    var a = arguments
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_lcmArray(values: number[]): number {
    var a = values
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_primeList(value: number): number[] {
    var ans = [];
    var arr = new Array(value).fill(0);
    for (var i = 2; i < value; i++) {
        for (var j = i; j < value; j += i) {
            if (arr[j] == 0) arr[j] = i;
        }
    }
    for (var i = 2; i < value; i++) {
        if (arr[i] == i) ans.push(i);
    }
    return ans;
}
function Math_primeFactor(p: number[], value: number): number[][] {
    var ans: number[][] = [];
    var valmax = value / 2;;
    for (var i = 0; i < p.length; i++) {
        var prime = p[i];
        if (valmax < prime) break;
        var count = 0;
        while (value % prime == 0) {
            value /= prime;
            count++;
        }
        if (count != 0) {
            ans.push([prime, count]);
        }
        if (value == 1) break;
    }
    return ans;
}


import * as fs from 'fs';

// main
function main(input: string[]) {
    // param
    var n: number = Number(input[0])
    var a: number[] = input[1].split(" ").map(x => Number(x));
    var ans;
    // process
    if (Math_gcdArray(a) != 1) {
        ans = "not coprime";
    } else {
        var p = new Array(Math.floor(Math_max(a) / 2) + 1).fill(0);
        var found = 0;
        loop: {
            for (var px = 2; px < p.length; px++) {
                found = 0;
                if (p[px] == 0) {
                    for (var pxx = px; pxx < p.length; pxx += px) {
                        p[pxx] = px;
                    }
                    // for (var ax = 0; ax < a.length; ax++) {
                    //     if (a[ax] % px == 0) found++;
                    // }
                }
                if (2 <= found) break loop;
            }
        }
        if (2 <= found) {
            ans = "setwise coprime"
        } else {
            ans = "pairwise coprime"
        }
    }
    console.log(ans);
}

// entrypoint
function entrypoint() {
    try {
        var input = fs.readFileSync("/dev/stdin", "utf8").trim().split("\n");
        console.debug = function () { };
        main(input);
    }
    catch (ex) {
        console.log("----");
        console.log("file='%s'", __filename.split("\\").slice(-1)[0]);
        console.log("----");
        const lines: string[] = [];
        // @ts-ignore
        const reader = require('readline').createInterface({
            // @ts-ignore
            input: process.stdin,
            // @ts-ignore
            output: process.stdout
        });
        reader.on('line', function (line: string) {
            lines.push(line);
        });
        reader.on('close', function () {
            input = lines;
            console.log("input=%o", input);
            console.time();
            console.log("----")
            main(input);
            console.log("----")
            console.timeEnd();
        });
    }
}
entrypoint();

// library
function Math_max(arr: number[]): number { return arr.reduce((x, y) => Math.max(x, y)); }
function Math_min(arr: number[]): number { return arr.reduce((x, y) => Math.min(x, y)); }
function Math_gcd(): number {
    var ans = arguments[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < arguments.length; i++) {
        ans = f(ans, arguments[i]);
    }
    return ans
};
function Math_gcdArray(values: number[]): number {
    var ans = values[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < values.length; i++) {
        ans = f(ans, values[i]);
    }
    return ans
};
function Math_lcm(): number {
    var a = arguments
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_lcmArray(values: number[]): number {
    var a = values
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_primeList(value: number): number[] {
    var ans = [];
    var arr = new Array(value).fill(0);
    for (var i = 2; i < value; i++) {
        for (var j = i; j < value; j += i) {
            if (arr[j] == 0) arr[j] = i;
        }
    }
    for (var i = 2; i < value; i++) {
        if (arr[i] == i) ans.push(i);
    }
    return ans;
}
function Math_primeFactor(p: number[], value: number): number[][] {
    var ans: number[][] = [];
    var valmax = value / 2;;
    for (var i = 0; i < p.length; i++) {
        var prime = p[i];
        if (valmax < prime) break;
        var count = 0;
        while (value % prime == 0) {
            value /= prime;
            count++;
        }
        if (count != 0) {
            ans.push([prime, count]);
        }
        if (value == 1) break;
    }
    return ans;
}


import * as fs from 'fs';

// main
function main(input: string[]) {
    // param
    var n: number = Number(input[0])
    var a: number[] = input[1].split(" ").map(x => Number(x));
    var ans;
    // process
    if (Math_gcdArray(a) != 1) {
        ans = "not coprime";
    } else {
        var p = new Array(Math.floor(Math_max(a) / 2) + 1).fill(0);
        var found = 0;
        loop: {
            for (var px = 2; px < p.length; px++) {
                found = 0;
                if (p[px] == 0) {
                    for (var pxx = px; pxx < p.length; pxx += px) {
                        p[pxx] = px;
                    }
                    for (var ax = 0; ax < a.length; ax++) {
                        // if (a[ax] % px == 0) found++;
                    }
                }
                if (2 <= found) break loop;
            }
        }
        if (2 <= found) {
            ans = "setwise coprime"
        } else {
            ans = "pairwise coprime"
        }
    }
    console.log(ans);
}

// entrypoint
function entrypoint() {
    try {
        var input = fs.readFileSync("/dev/stdin", "utf8").trim().split("\n");
        console.debug = function () { };
        main(input);
    }
    catch (ex) {
        console.log("----");
        console.log("file='%s'", __filename.split("\\").slice(-1)[0]);
        console.log("----");
        const lines: string[] = [];
        // @ts-ignore
        const reader = require('readline').createInterface({
            // @ts-ignore
            input: process.stdin,
            // @ts-ignore
            output: process.stdout
        });
        reader.on('line', function (line: string) {
            lines.push(line);
        });
        reader.on('close', function () {
            input = lines;
            console.log("input=%o", input);
            console.time();
            console.log("----")
            main(input);
            console.log("----")
            console.timeEnd();
        });
    }
}
entrypoint();

// library
function Math_max(arr: number[]): number { return arr.reduce((x, y) => Math.max(x, y)); }
function Math_min(arr: number[]): number { return arr.reduce((x, y) => Math.min(x, y)); }
function Math_gcd(): number {
    var ans = arguments[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < arguments.length; i++) {
        ans = f(ans, arguments[i]);
    }
    return ans
};
function Math_gcdArray(values: number[]): number {
    var ans = values[0];
    var f = (a: number, b: number): number => b ? f(b, a % b) : a
    for (var i = 1; i < values.length; i++) {
        ans = f(ans, values[i]);
    }
    return ans
};
function Math_lcm(): number {
    var a = arguments
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_lcmArray(values: number[]): number {
    var a = values
    var g = (n: number, m: number): number => m ? g(m, n % m) : n
    var l = (n: number, m: number): number => n * m / g(n, m)
    var ans = a[0]
    for (var i = 1; i < a.length; i++) {
        ans = l(ans, a[i])
    }
    return ans
}
function Math_primeList(value: number): number[] {
    var ans = [];
    var arr = new Array(value).fill(0);
    for (var i = 2; i < value; i++) {
        for (var j = i; j < value; j += i) {
            if (arr[j] == 0) arr[j] = i;
        }
    }
    for (var i = 2; i < value; i++) {
        if (arr[i] == i) ans.push(i);
    }
    return ans;
}
function Math_primeFactor(p: number[], value: number): number[][] {
    var ans: number[][] = [];
    var valmax = value / 2;;
    for (var i = 0; i < p.length; i++) {
        var prime = p[i];
        if (valmax < prime) break;
        var count = 0;
        while (value % prime == 0) {
            value /= prime;
            count++;
        }
        if (count != 0) {
            ans.push([prime, count]);
        }
        if (value == 1) break;
    }
    return ans;
}


moji = input()
if moji.isupper():
    print('A')
else:
    print('a')


a = input()

if a.isupper() == True:
  print('A')
elif a.islower() == True:
  print('a')


a = input()
if a.isupper():
  print('A')
else:
  print('a')


m = input()
x=ord(m)
if x >= 97 and x <= 122:
    print("a")
else:
    print("A"


m = input()
if m == "A" or m == "B" or m == "Q" or m == "W" or m == "E" or m == "R" or m == "T" or m == "Y" or m == "U" or m == "I" or m == "O" or m == "P" or m == "S" or m == "D" or m == "F" or m == "G" or m == "H" or m == "J" or m == "K" or m == "L" or m == "Z" or m == "X" or m == "C" or m == "V" or m == "B" or m == "N" or m == "M":
    print("A")
if m == "a" or m == "b" or m == "q" or m == "w" or m == "e" or m == "r" or m == "t" or m == "y" or m == "u" or m == "i" or m == "o" or m == "p" or m == "s" or m == "d" or m == "f" or m == "g" or m == "h" or m == "j" or m == "k" or m == "l" or m == "Z" or m == "x" or m == "c" or m == "v" or m == "b" or m == "n" or m == "m":
    print("a")


m = input()
if m == "A":
    print("A")
if m == "a":
    print("a")


/*****Author: Satyajeet Singh, Delhi Technological University************************************/
    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.lang.*;
    import java.math.*;
public class Main{
/*********************************************Constants******************************************/
    static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static long mod=(long)1e9+7;
    static long mod1=998244353;
    static ArrayList<Integer> graph[];
    static int pptr=0,pptrmax=0;
    static String st[];
/*****************************************Solution Begins***************************************/
    public static void main(String args[]) throws Exception{
        if(Character.isUpperCase(ps().charAt(0))){
            out.println("A");
        }
        else out.println("a");
/****************************************Solution Ends**************************************************/
        out.flush();
        out.close();
    }
/****************************************Template Begins************************************************/
    static void nl() throws Exception{
        pptr=0;
        st=br.readLine().split(" ");
        pptrmax=st.length;
    }
    static void nls() throws Exception{
        pptr=0;
        st=br.readLine().split("");
        pptrmax=st.length;
    }
    static int pi() throws Exception{
        if(pptr==pptrmax)
            nl();
        return Integer.parseInt(st[pptr++]);
    }
    static long pl() throws Exception{
        if(pptr==pptrmax)
            nl();
        return Long.parseLong(st[pptr++]);
    }
    static double pd() throws Exception{
        if(pptr==pptrmax)
            nl();
        return Double.parseDouble(st[pptr++]);
    }
    static String ps() throws Exception{
        if(pptr==pptrmax)
            nl();
        return st[pptr++];
    }
/***************************************Precision Printing**********************************************/
    static void printPrecision(double d){
        DecimalFormat ft = new DecimalFormat("0.0000000000");
        out.println(ft.format(d));
    }
/**************************************Bit Manipulation**************************************************/
    static int countBit(long mask){
        int ans=0;
        while(mask!=0){
            mask&=(mask-1);
            ans++;
        }
        return ans;
    }
/******************************************Graph*********************************************************/
    static void Makegraph(int n){
        graph=new ArrayList[n];
        for(int i=0;i<n;i++)
            graph[i]=new ArrayList<>();
    }
    static void addEdge(int a,int b){
        graph[a].add(b);
    }
    // static void addEdge(int a,int b,int c){
    //     graph[a].add(new Pair(b,c));
    // }
/*********************************************PAIR********************************************************/
    static class Pair{
        int u;
        int v;
        public Pair(int u, int v) {
            this.u = u;
            this.v = v;
        }
        public int hashCode() {
            int hu = (int) (u ^ (u >>> 32));
            int hv = (int) (v ^ (v >>> 32));
            return 31 * hu + hv;
        }
        public boolean equals(Object o) {
            Pair other = (Pair) o;
            return u == other.u && v == other.v;
        }
        public String toString() {
            return "[u=" + u + ", v=" + v + "]";
        }
    }
/******************************************Long Pair*******************************************************/
    static class Pairl{
        long u;
        long v;
        public Pairl(long u, long v) {
            this.u = u;
            this.v = v;
        }
        public int hashCode() {
            int hu = (int) (u ^ (u >>> 32));
            int hv = (int) (v ^ (v >>> 32));
            return 31 * hu + hv;
        }
        public boolean equals(Object o) {
            Pairl other = (Pairl) o;
            return u == other.u && v == other.v;
        }
        public String toString() {
            return "[u=" + u + ", v=" + v + "]";
        }
    }
/*****************************************DEBUG***********************************************************/
    public static void debug(Object... o){
        System.out.println(Arrays.deepToString(o));
    }
/************************************MODULAR EXPONENTIATION***********************************************/
    static long modulo(long a,long b,long c){
        long x=1,y=a%c;
        while(b > 0){
            if(b%2 == 1)
                x=(x*y)%c;
            y = (y*y)%c;
            b = b>>1;
        }
        return  x%c;
    }
/********************************************GCD**********************************************************/
    static long gcd(long x, long y){
        if(x==0)
            return y;
        if(y==0)
            return x;
        long r=0, a, b;
        a = (x > y) ? x : y;
        b = (x < y) ? x : y;
        r = b;
        while(a % b != 0){
            r = a % b;
            a = b;
            b = r;
        }
        return r;
    }
}


import java.io.*;
import java.util.*;
import java.lang.*;

public class Main {
    public static MyScanner scan;
    public static PrintWriter out;
    public static void main(String[] args) {
        scan=new MyScanner();
        out=new PrintWriter(new BufferedOutputStream(System.out));

        int t=1;
//        int t=scan.nextInt();
        while(t-->0) {

            String s=scan.nextLine();
            boolean yes=false;
            for(int c='A';c<='Z';c++) if(c==s.charAt(0)) yes=true;
            if(yes) out.println("A");
            else out.println("a");
        }
        out.close();
    }

    //-----------------------------------------------------COMP-SPACE-----------------------------------------------------

    //--------------------------------------------------------------------------------------------------------------------

    //node
    static class Node implements Comparable<Node> {
        public int x,y;
        public Node(int x,int y) {
            this.x=x;
            this.y=y;
        }

        public int compareTo(Node other) {
            if(this.x==other.x) return 0;
            else if(this.x>other.x) return 1;
            else return -1;
        }

        public boolean equals(Node other) {
            return this.x==other.x;
        }

//        public int compareTo(Node other) {
//            if(this.y==other.y) return 0;
//            else if(this.y>other.y) return 1;
//            else return -1;
//        }
//
//        public boolean equals(Node other) {
//            return this.y==other.y;
//        }
    }
    //edge
    static class Edge implements Comparable<Edge> {
        public Node a,b;
        public int weight;

        public Edge(Node a,Node b,int weight) {
            this.a=a;
            this.b=b;
            this.weight=weight;
        }

        public int compareTo(Edge other) {
            if(this.weight==other.weight) return 0;
            else if(this.weight>other.weight) return 1;
            else return -1;
        }
    }

    //util
    public static int gcd(int a, int b) {
        if (b == 0)
            return a;
        if (a == 0)
            return b;
        return (a > b) ? gcd(a % b, b) : gcd(a, b % a);
    }

    public static int lcm(int a, int b) {
        return a * b / gcd(a, b);
    }

    public static int min(int a,int b) {
        if(a<=b) return a;
        else return b;
    }

    public static int max(int a,int b) {
        if(a>=b) return a;
        else return b;
    }

    public static int abs(int a) {
        if(a<0) return a*-1;
        else return a;
    }

    public static ArrayList<Integer> getPrimes(int n) {
        boolean prime[]=new boolean[n+1];
        Arrays.fill(prime,true);
        for (int p=2;p*p<=n;p++) {
            if (prime[p]) {
                for (int i=p*2;i<=n;i+=p) {
                    prime[i]=false;
                }
            }
        }
        ArrayList<Integer> primeNumbers=new ArrayList<Integer>();
        for (int i = 2; i <= n; i++) {
            if (prime[i]) {
                primeNumbers.add(i);
            }
        }
        return primeNumbers;
    }

    public static boolean isPrime(int a) {
        if (a == 0 || a == 1) {
            return false;
        }
        if (a == 2) {
            return true;
        }
        for (int i = 2; i < Math.sqrt(a) + 1; i++) {
            if (a % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static ArrayList<Integer> getDivisors(int n) {
        ArrayList<Integer> div = new ArrayList<Integer>();
        for (int i=1;i*i<=n;i++) {
            if (n%i==0) {
                div.add(i);
                if (n/i!=i)
                    div.add(n/i);
            }
        }
        return div;
    }

    //scanner
    public static class MyScanner {
        BufferedReader br;
        StringTokenizer st;

        public MyScanner() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    public static int[] nextIntArray(int n) {
        int[] a=new int[n];
        for(int c=0;c<n;c++) a[c]=scan.nextInt();
        return a;
    }

    public static Integer[] nextIntegerArray(int n) {
        Integer[] a=new Integer[n];
        for(int c=0;c<n;c++) a[c]=scan.nextInt();
        return a;
    }

    public static int[][] nextIntMatrix(int n,int m) {
        int[][] a=new int[n][m];
        for(int i=0;i<n;i++) for(int j=0;j<m;j++) a[i][j]=scan.nextInt();
        return a;
    }

    public static Integer[][] nextIntegerMatrix(int n,int m) {
        Integer[][] a=new Integer[n][m];
        for(int i=0;i<n;i++) for(int j=0;j<m;j++) a[i][j]=scan.nextInt();
        return a;
    }

    //print
    public static void printIntArray(int[] a) {
        for(int c:a) out.print(c+" ");
        out.println();
    }

    public static void printIntegerArray(Integer[] a) {
        for(int c:a) out.print(c+" ");
        out.println();
    }

    public static void printIntMatrix(int[][] a) {
        for(int[] i:a) {
            for(int j:i) out.print(j+" ");
            out.println();
        }
    }

    public static void printIntegerMatrix(Integer[][] a) {
        for(Integer[] i:a) {
            for(Integer j:i) out.print(j+" ");
            out.println();
        }
    }

    public static void help(int t,int n) { out.println("Test Case: "+(t+1)+" | Variable Output: "+n); }
    public static void help(int t,String n) { out.println("Test Case: "+(t+1)+" | Variable Output: "+n); }
    public static void help(int t,char[] n) { out.print("Test Case: "+(t+1)+" | Variable Output: "); for(char c:n) out.print(c+" "); out.println(); }
}


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String a = br.readLine();
        System.out.println(problem171a(a));
    }

    private static String problem171a(String a) {
        return (a.equals(a.toLowerCase())) ? "a" : "A";
    }
}


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.TreeSet;

public class Practice {

	public static void main(String[] args) {

		Scanner inScanner = new Scanner(System.in);

		String worString = inScanner.next();
		char d = worString.charAt(0);
		if (Character.isUpperCase(d)) {
			System.out.println("A");
		}else {
			System.out.println("a");
		}

	}
}


public class Main {
 	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
      	char c = sc.next();
    	if (Character.isUpperCase()) System.out.println('A');
        else System.out.println('a');
    }
}


import java.util.*;

public static class Main{
  public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int k=sc.nextInt();
    int[] p=new int[n;
    for(int i=0;i<n;i++){
		p[i]=sc.nextInt();
    }
    Arrays.sort(p);
	int s=0;
    for(int i=0;i<k;i++){
      s=+p[i];
    }
                    System.out.println(s);
                    }


#include <stdio.h>

int main() {
  char ch;
  scanf("%c", &ch);

  if('A' <= ch && ch <= 'Z') {
    puts("A");
  }
  else if('a' <= ch && ch <= 'z') {
    puts("a");
  }
  return 0;
}


#include<stdio.h>

int main(){
	char name;
	scanf("%c", &name);

	if (name >= 'A' && name <= 'Z'){
		puts( "A");
	}
	else if(name >= 'a' && name <= 'z'){
		puts("a");
	}
	return 0;
	}


#include <stdio.h>
int main ()
{

	char abjad;
	scanf("%c",&abjad);

		if(abjad >= 'A' && abjad <= 'Z')
		{

			printf("A");
		}

		else if (abjad>='a' && abjad<='z')
		{
			printf("a");

		}
		return 0;
}


#include<iostream>
#include<stdio.h>
//#include <bits/stdc++.h>
#include<vector>
#include<float.h>
#include<iomanip>
#include<algorithm>
#include<string>
#include<cstring>
#include<math.h>
#include<cmath>
#include<sstream>
#include<set>
#include<map>
#include<queue>
#include<cassert>
#include<cmath>
#include<cstdint>

#define INF 1e9
#define LINF 1e19
#define rep(i,n)for(int i=0;(i)<(int)(n);i++)
#define REP(i,a,b)for(int i=(int)(a);(i)<=(int)(b);i++)
#define VEC(type, c, n) std::vector<type> c(n);for(auto& i:c)std::cin>>i;
#define vec(type,n) vector<type>(n)
#define vvec(m,n) vector<vector<int>> (int(m),vector<int>(n))
#define ALL(a)  (a).begin(),(a).end()
#define chmin(a, b) a = min(a, b)
#define chmax(a, b) a = max(a, b)
#define pb push_back
#define sz size()

using namespace std;
using ll = long long;
using Graph = vector<vector<int>>;
using P = pair<ll, ll>;

const ll MOD = 1e9 + 7;
const ll ZER = 0;

int main(){
    char c;
    cin >> c;
    if(islower(c)){
        char res = 'A' + (c - 'a');
        cout << res << endl;
    }
    else {
        char res = 'a' + (c - 'A');
        cout << res << endl;
    }
}


#include <bits/stdc++.h>
using namespace std;

int main(){
  char a;
  cin >> a;
  if(a == 'A' || 'B' ||'C' ||'D' ||'E' || 'F'||'G' ||'H' || 'I'||'J' ||'K' ||'L' || 'M'||'N' ||'O' ||'P' || 'Q'||'R' ||'S' ||'T' ||'U' ||'V' || 'W'|| 'X'||'Y' ||'Z')
  {cout << 'A' << endl;}
  else{cout << 'a' << endl;}
}


#include <bits/stdc++.h>
using namespace std;

int main(){
  char a;
  cin >> a;
  if(a == 'A' || 'B' ||'C' ||'D' ||'E' || 'F'||'G' ||'H' || 'I'||'J' ||'K' ||'L' || 'M'||'N' ||'O' ||'P' || 'Q'||'R' ||'S' ||'T' ||'U' ||'V' || 'W'|| 'X'||'Y' ||'Z'||)
  {cout << 'A' << endl;}
  else{cout << 'a' << endl;}
}


#include <stdio.h>

int main(void) {

  char chara;

  scanf("%c", &chara);

  if((chara >= 'a') && (chara <= 'z')) {
    printf("a \n");
  }

  if((chara >= 'A') && (chara <= 'Z')) {
    printf("A \n");
  }

  return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(void)
{
    char a;
    scanf("%c", &a);
    if ('a' <= a && a <= 'z')
    {
        printf("a\n");
    }
    else
    {
        printf("A\n");
    }
    return 0;
}


int main(){
  char s;
  scanf("%c",&s);

    printf("%c",s>=97?'a':'A');
}


#include <bits/stdc++.h>
#define rep(i,n) for (int i = 0; i < n; i++)
using namespace std;
using ll = long long;
using P = pair<int, int>;
using V = vector<int>;

int main(int argc, char const *argv[])
{
    char a; cin >> a;
    if (isupper(a)) cout << "A" << endl;
    else cout << "a" << endl;
    return 0;
}


#include <stdio.h>
#include <ctype.h>

int main(void){
    // Your code here!
    char c;
    scanf("%s",&c);

    if (isupper(c)){
        printf('A');
    }
    else{
        printf('a');
    }
}


#include<stdio.h>

int main(void){
	char a = 0;
	scanf("%c",&a);
	if (97 <= a&&a <= 122) {
		printf("a");
	}
	if (65<= a&&a <= 90) {
		printf("A");
	}
	 return 0;
}}


function main(lines) {
    const a = lines[0].charAt(0)

    if ('a'.charAt(0) <= a && a <= 'z'.charAt(0))
	    console.log('a')
    if ('A'.charAt(0) <= a && a <= 'Z'.charAt(0))
	    console.log('A')
}

main(require("fs").readFileSync("/dev/stdin", "utf8").split("\n"))


function main(input){
	input=input.split("\n");
var answer=input[0];
var answerA=input[0].toUpperCase();

if(answer==answerA){console.log("A")}else{console.log("a")}

}

main(require("fs").readFileSync("/dev/stdin", "utf8"));


function Main(input) {
    input = input.split("\n");

    const hoge = input[0];

    if (hoge === hoge.toUpperCase()) {
        console.log('A');
    } else {
        console.log('a');
    }
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));


function Main(inputs) {
	const inputline = inputs.split("\n").map(x => parseInt(x, 10));
  	const line = inputline[0];

  	function base26(number) {
    	let remainder26 = number % 26;
    	let division26 = Math.floor(number / 26) ;
    	let output = (remainder26 != 0) ? String.fromCharCode(64 + remainder26) : (--division26, 'Z');
      	return output = (division26 != 0) ? base26(division26) + output : output;
	}

  	console.log(base26(line).toLowerCase());
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));


function Main(input) {
    const a = input;

    if(isUpperCase(a)){
        console.log('A');
    }else{
        console.log('a');
    }

}

function isUpperCase (str) {
    return str.match(/^[A-Z]+$/);
}

//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));


function Main(input) {
    const a = input;

    if(isUpperCase(a)){
        console.log('A');
    }else{
        console.log('a');
    }

}

const isUpperCase = c => {
    return /^[A-Z]+$/g.test(c)
}

//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));


package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

const (
	SCANNER_BUF_SIZE = 2 << 20

	INF = int64(math.MaxInt64)
	MOD = 1e9 + 7
)

var (
	writer  *bufio.Writer
	scanner *bufio.Scanner
)

func init() {
	writer = bufio.NewWriter(os.Stdout)
	scanner = bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, SCANNER_BUF_SIZE), SCANNER_BUF_SIZE)
}

func printf(f string, a ...interface{}) {
	fmt.Fprintf(writer, f, a...)
}

func sint64() int64 {
	scanner.Scan()
	bb := scanner.Bytes()
	i := int64(0)
	if bb[0] == '-' {
		for _, b := range bb[1:] {
			i *= 10
			i -= int64(b - '0')
		}
		return i
	}
	for _, b := range bb {
		i *= 10
		i += int64(b - '0')
	}
	return i
}

func suint64() uint64 {
	scanner.Scan()
	bb := scanner.Bytes()
	i := uint64(0)
	for _, b := range bb {
		i *= 10
		i += uint64(b - '0')
	}
	return i
}

func sstring() string {
	scanner.Scan()
	return scanner.Text()
}

func gcd(a, b int64) int64 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func lcm(a, b int64) int64 {
	return a * b / gcd(a, b)
}

func abs(a int64) int64 {
	if a < 0 {
		return a * -1
	}
	return a
}

func min(a int64, rest ...int64) int64 {
	for _, r := range rest {
		if r < a {
			a = r
		}
	}
	return a
}

func max(a int64, rest ...int64) int64 {
	for _, r := range rest {
		if r > a {
			a = r
		}
	}
	return a
}

func main() {
	defer writer.Flush()
	c := sstring()[0]
	if c >= 'A' && c <= 'Z' {
		printf("A")
	} else {
		printf("a")
	}
}


package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	a := getStdin()
	if 'a' <= a[0] && a[0] <= 'z' {
		fmt.Printf("a\n")
	} else {
		fmt.Printf("A\n")
	}
}

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*1)

func getStdin() string {
	return readLine()
}
func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, _ := sc.ReadLine()
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}


package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*1)

func main() {
	a := getStdin()
	if 'a' <= a[0] && a[0] <= 'z' {
		fmt.Print("a")
	} else {
		fmt.Print("A")
	}
	fmt.Printf("\n")
}

func getStdin() string {
	return readLine()
}
func getStdinInt() int {
	str := getStdin()
	rtn, _ := strconv.Atoi(str)
	return rtn
}
func getStdinInt2() (int, int) {
	list := getStdinIntArr()
	return list[0], list[1]
}
func getStdinInt3() (int, int, int) {
	list := getStdinIntArr()
	return list[0], list[1], list[2]
}
func getStdinIntArr() []int {
	str := getStdin()
	list := strings.Split(str, " ")
	rtn := make([]int, len(list))
	for idx, val := range list {
		rtn[idx], _ = strconv.Atoi(val)
	}
	return rtn
}

func getStdinIntArr64() []int64 {
	str := getStdin()
	list := strings.Split(str, " ")
	rtn := make([]int64, len(list))
	for idx, val := range list {
		rtn[idx], _ = strconv.ParseInt(val, 10, 64)
	}
	return rtn
}

func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, e := sc.ReadLine()
		if e != nil {
			panic(e)
		}
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}


package main

import (
	"fmt"
	"strings"
)

func main() {
	var a string
	fmt.Scanf("%s\n", &a)

	fmt.Println(strings.ToLower(a))
}


package main

import "fmt"

func main() {
	var n int
	fmt.Scanf("%d\n", &n)

	slice := make([]int, n)
	for i := 0; i < n; i++ {
		if i != n-1 {
			fmt.Scanf("%d", &slice[i])
		} else {
			fmt.Scanf("%d\n", &slice[i])
		}
	}

	var q, b, c int
	fmt.Scanf("%d\n", &q)
	out := make([]int, q)
	for i := 0; i < q; i++ {
		fmt.Scanf("%d %d\n", &b, &c)
		for j := 0; j < n; j++ {
			if slice[j] == b {
				slice[j] = c
			}
			out[i] += slice[j]
		}
	}

	for _, j := range out {
		fmt.Println(j)
	}

}


package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
	"unicode"
)

type Io struct {
	reader    *bufio.Reader
	writer    *bufio.Writer
	tokens    []string
	nextToken int
}

func NewIo() *Io {
	return &Io{
		reader: bufio.NewReader(os.Stdin),
		writer: bufio.NewWriter(os.Stdout),
	}
}

func (io *Io) Flush() {
	if err := io.writer.Flush(); err != nil {
		panic(err)
	}
}

func (io *Io) NextLine() string {
	var buffer []byte
	for {
		line, isPrefix, err := io.reader.ReadLine()
		if err != nil {
			panic(err)
		}
		buffer = append(buffer, line...)
		if !isPrefix {
			break
		}
	}
	return string(buffer)
}

func (io *Io) Next() string {
	for io.nextToken >= len(io.tokens) {
		line := io.NextLine()
		io.tokens = strings.Fields(line)
		io.nextToken = 0
	}
	r := io.tokens[io.nextToken]
	io.nextToken++
	return r
}

func (io *Io) NextInt() int {
	i, err := strconv.Atoi(io.Next())
	if err != nil {
		panic(err)
	}
	return i
}

func (io *Io) NextFloat() float64 {
	i, err := strconv.ParseFloat(io.Next(), 64)
	if err != nil {
		panic(err)
	}
	return i
}

func (io *Io) PrintLn(a ...interface{}) {
	fmt.Fprintln(io.writer, a...)
}

func (io *Io) Printf(format string, a ...interface{}) {
	fmt.Fprintf(io.writer, format, a...)
}

func (io *Io) PrintIntLn(a []int) {
	b := []interface{}{}
	for _, x := range a {
		b = append(b, x)
	}
	io.PrintLn(b...)
}

func (io *Io) PrintStringLn(a []string) {
	b := []interface{}{}
	for _, x := range a {
		b = append(b, x)
	}
	io.PrintLn(b...)
}

func Log(name string, value interface{}) {
	fmt.Fprintf(os.Stderr, "%s=%+v\n", name, value)
}

func intMin(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func intMax(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	io := NewIo()
	defer io.Flush()
	A := io.Next()
	if unicode.IsUpper(A) {
		io.PrintLn("A")
		return
	}
	io.PrintLn("a")
}


# https://atcoder.jp/contests/abc171/tasks/abc171_a

alpha = gets.chomp
cond = alpha.upcase == alpha
puts cond ? 'A' : 'a'


line = gets
puts (line == line.downcase ? 'a': 'A')


a = gets.chomp.to_s

if (a == a.upcase) then
	puts "A"
else
	puts "a"
end


n = gets.to_i

# 26進数

chars = ('a'..'z').to_a

result = ''

while n > 0
  n -= 1
  result << chars[n % 26]
  n /= 26
end

puts result.reverse


_n, k = gets.split("\s").map(&:to_i)
p = gets.split("\s").map(&:to_i)

p p.sort[0..k-1].sum


line = gets

puts (line == line.downcase ? 'a'. 'A')


use std::io::*;
use std::str::FromStr;

fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}

fn main() {
    let x: String = read();
    let lower_x = x.to_ascii_lowercase();
    if x != lower_x {
        println!("A");
    } else {
        println!("a");
    }
}


use proconio::*;

fn main() {
    input! {
        a: char
    }

    if a >= 'A' && a <= 'Z' { println!("A"); }
    else if a >= 'a' && a <= 'z' { println!("a"); }
}


use proconio::{input, fastout};

#[fastout]
fn main() {
    input!(a: char);
    if 'a'<=a && a<='z' {
        println!("a");
    } else {
        println!("A");
    }
}


use proconio::input;

fn main() {
    input! {
        n: usize,
        k: usize,
        mut p: [i32; n]
    }

    solve(k, &mut p);
}

fn solve(k: usize, p: &mut [i32]) {
    p.sort();

    let s = p.iter().take(k).sum::<i32>();
    println!("{}", s);
}


use proconio::input;

fn main() {
    input! {
        a:char
    }
    println!("{}", if a <= 'z' { 'A' } else { 'a' })
}


use proconio::input;

fn main() {
    input! {
        a:char
    }
    println!("{}", if a <= 'z' { 'A' } else { 'B' })
}


let input = Character(readLine()!).unicodeScalars.first!.value - base
let base = Character("A").unicodeScalars.first!.value

if input - base < 26 {
  print("A")
} else {
  print("a")
}


let a = readLine()!
if a == a.lowercased() {
  print("a")
} else {
  print("A")
}


let char = readLine()!.first!
print(char.isUppercase ? "A" : "a")


let a = readLine()!
print(a.range(of: "[A-Z]", options: .regularExpression) == nil ? "a" : "A")


import Foundation
let main: () = {
    let N = nextInt()
    var n = N
    var ans = ""
    repeat {
        n -= 1
        ans = Character.fromInt("a"[0].asciiCode + n % 26).string + ans
        n /= 26
    } while n > 0
    print(ans)
}()

struct SimpleModInt {
    let MOD = 998244353
    var value: Int {
        didSet {
            value %= MOD
        }
    }
    init(_ initialValue: Int) {
        value = initialValue
        value %= MOD
    }
    init(_ initialValue: SimpleModInt) {
        value = initialValue.value
        value %= MOD
    }
}
infix operator <-: AssignmentPrecedence
extension SimpleModInt {
    static func + (left: SimpleModInt, right: Int) -> SimpleModInt { SimpleModInt(left.value + right) }
    static func + (left: SimpleModInt, right: SimpleModInt) -> SimpleModInt { SimpleModInt(left.value + right.value) }
    static func - (left: SimpleModInt, right: Int) -> SimpleModInt { SimpleModInt(left.value - right) }
    static func - (left: SimpleModInt, right: SimpleModInt) -> SimpleModInt { SimpleModInt(left.value - right.value) }
    static func * (left: SimpleModInt, right: Int) -> SimpleModInt { SimpleModInt(left.value * right) }
    static func * (left: SimpleModInt, right: SimpleModInt) -> SimpleModInt { SimpleModInt(left.value * right.value) }
    static func <- (left: inout SimpleModInt, right: Int) { left.value = right }
    static func <- (left: inout SimpleModInt, right: SimpleModInt) { left.value = right.value }
    static func += (left: inout SimpleModInt, right: Int) { left.value += right }
    static func += (left: inout SimpleModInt, right: SimpleModInt) { left.value += right.value }
    static func -= (left: inout SimpleModInt, right: Int) { left.value -= right }
    static func -= (left: inout SimpleModInt, right: SimpleModInt) { left.value -= right.value }
    static func *= (left: inout SimpleModInt, right: Int) { left.value *= right }
    static func *= (left: inout SimpleModInt, right: SimpleModInt) { left.value *= right.value }
    static func == (left: SimpleModInt, right: Int) -> Bool { left.value == SimpleModInt(right).value }
    static func == (left: SimpleModInt, right: SimpleModInt) -> Bool { left.value == right.value }
    static func != (left: SimpleModInt, right: Int) -> Bool { left.value != SimpleModInt(right).value }
    static func != (left: SimpleModInt, right: SimpleModInt) -> Bool { left.value != right.value }
}

//----------------------------------

let dx = [1, 0, -1, 0] //[1, 0, -1, 0, -1,  1, -1, 1]
let dy = [0, 1, 0, -1] //[0, 1, 0, -1, -1, -1,  1, 1]

@inlinable func gcd(_ a: Int, _ b: Int) -> Int { (b > 0) ? gcd(b, a % b) : a }
@inlinable func lcm(_ a: Int, _ b: Int) -> Int { a / gcd(a, b) * b }

//----------------------------------

infix operator  =~ : ComparisonPrecedence
infix operator !=~ : ComparisonPrecedence
func =~ <T: FixedWidthInteger>(left: T, right: Range<T>) -> Bool { right ~= left }
func !=~ <T: FixedWidthInteger>(left: T, right: Range<T>) -> Bool { !(right ~= left) }
func =~ <T: FixedWidthInteger>(left: T, right: ClosedRange<T>) -> Bool { right ~= left }
func !=~ <T: FixedWidthInteger>(left: T, right: ClosedRange<T>) -> Bool { !(right ~= left) }

func =~ <T: Collection > (left: T.Element, right: T) -> Bool where T.Element : Equatable { right.contains(left) }
func !=~ <T: Collection > (left: T.Element, right: T) -> Bool where T.Element : Equatable { !right.contains(left) }

infix operator /^ : MultiplicationPrecedence
infix operator /^= : AssignmentPrecedence
func /^ <T: FixedWidthInteger>(left: T, right: T) -> T { (left + (right - 1)) / right }
func /^= <T: FixedWidthInteger>(left: inout T, right: T) { left = (left + (right - 1)) / right }

@inlinable func chmax<T: Comparable>(_ m: inout T, _ q: T) { if (m < q) { m = q } }
@inlinable func chmin<T: Comparable>(_ m: inout T, _ q: T) { if (m > q) { m = q } }
@inlinable func chRmax<T: Comparable>(_ m: inout T, _ q: T) -> Bool { if (m < q) { m = q; return true } else { return false } }
@inlinable func chRmin<T: Comparable>(_ m: inout T, _ q: T) -> Bool { if (m > q) { m = q; return true } else { return false } }

prefix operator *
prefix func * <T> (a: [T]) -> (T, T) { (a[0], a[1]) }
prefix func * <T> (a: [T]) -> (T, T, T) { (a[0], a[1], a[2]) }
prefix func * <T> (a: [T]) -> (T, T, T, T) { (a[0], a[1], a[2], a[3]) }
prefix func * <T> (a: [T]) -> (T, T, T, T, T) { (a[0], a[1], a[2], a[3], a[4]) }
prefix func * <T> (a: [T]) -> (T, T, T, T, T, T) { (a[0], a[1], a[2], a[3], a[4], a[5]) }

func printErr(_ str: String, terminator: String = "\n") {
    let s = str + terminator
    FileHandle.standardError.write(s.data(using: .utf8)!)
    FileHandle.standardError.synchronizeFile()
}

@inlinable func next() -> String { readLine()! }
@inlinable func nextInt() -> Int { Int(next())! }
@inlinable func nextDouble() -> Double { Double(next())! }
@inlinable func listOfString() -> [String] { next().split(separator: " ").map(String.init) }
@inlinable func listOfInt() -> [Int] { listOfString().map { Int($0)! } }
@inlinable func listOfInt(_ offset: Int = 0) -> [Int] { listOfString().map { Int($0)! + offset } }
@inlinable func listOfInt(_ offsets: Int ...) -> [Int] { listOfString().enumerated().map { Int($0.element)! + offsets[$0.offset % offsets.count] } }
@inlinable func listOfDouble(_ offset: Double = 0.0) -> [Double] { listOfString().map { Double($0)! + offset } }
@inlinable func listOfDouble(_ offsets: Double ...) -> [Double] { listOfString().enumerated().map { Double($0.element)! + offsets[$0.offset % offsets.count] } }

extension Int {
    init(s: String) { self.init(s)! }
    var isEven: Bool { self.isMultiple(of: 2) }
    var isOdd: Bool { !self.isEven }
    var isTrue: Bool { self != 0 }
    var isFalse: Bool { !self.isTrue }
    var toString: String { String(self) }
    var toChar: Character { Character(UnicodeScalar(UInt8(self))) }
}
func + (left: Int, right: Bool) -> Int { left + (right ? 1 : 0) }
extension Character {
    var asciiCode: Int { Int(self.asciiValue!) }
    var string: String { String(self) }
    static func fromInt(_ int: Int) -> Character { Character(UnicodeScalar(int)!) }
}
extension String {
    @inlinable subscript (position: Int) -> Character { self[self.index(self.startIndex, offsetBy: position)] }
    @inlinable func repeate(_ times: Int) -> String { String(repeating: self, count: times) }
    //  @inlinable subscript (n: Int) -> String { String(self[self.index(self.startIndex, offsetBy: n)]) }
    //  @inlinable subscript (n: Int) -> Int { Int(self[self.index(self.startIndex, offsetBy: n)].asciiValue!) }
    var toInt: Int { Int(self)! }
}
extension String { // VB like
    @inlinable func _index(_ position: Int) -> String.Index! {
        if !(0 ..< self.count ~= position) { return nil }
        return self.index(self.startIndex, offsetBy: position)
    }
    @inlinable func mid(from index: Int, length: Int) -> String! {
        if let startPosition = self._index(index) {
            if let endPosition = self._index(index + length - 1) {
                return String(self[startPosition...endPosition])
            } else {
                let endPosition = self.index(before: self.endIndex)
                return String(self[startPosition...endPosition])
            }
        }
        return ""
    }
    @inlinable func left(_ length: Int) -> String { String(self.prefix(length)) }
    @inlinable func right(_ length: Int) -> String { String(self.suffix(length)) }
}

extension Dictionary {
    @inlinable mutating func getOrSet(_ key: Key, _ defaultValue: () -> Value) -> Value {
        if let stored = self[key] { return stored }
        else {
            let newValue = defaultValue()
            self[key] = newValue
            return newValue
        }
    }
    @inlinable mutating func getOrElse(_ key: Key, _ defaultValue: () -> Value) -> Value {
        if let stored = self[key] { return stored } else { return defaultValue() }
    }
    @inlinable func containsKey(_ key: Key) -> Bool { self.keys.contains(key) }
}

extension Set {
    static func += (left: inout Set<Element>, right: Element) { left.insert(right) }
    static func -= (left: inout Set<Element>, right: Element) { left.remove(right) }
}

extension Array {
    static func += (left: inout Array<Element>, right: Element) { left.append(right) }
    init(_ size: Int, _ initValue: ((Int) -> Element)) {
        self = [Element]()
        for index in 0 ..< size {
            let value = initValue(index)
            self.append(value)
        }
    }
    init(_ size: Int, _ initValue: (() -> Element)) {
        self = [Element]()
        for _ in 0 ..< size {
            let value = initValue()
            self.append(value)
        }
    }
}
typealias IntArray = Array<Int>
typealias DoubleArray = Array<Double>
typealias BoolArray = Array<Bool>
typealias StringArray = Array<String>

extension Array where Element == Int {
    init(_ size: Int) {
        self = [Element](repeating: 0, count: size)
    }
}
extension Array where Element == Double {
    init(_ size: Int) {
        self = [Element](repeating: 0.0, count: size)
    }
}
extension Array where Element == Bool {
    init(_ size: Int) {
        self = [Element](repeating: false, count: size)
    }
}
extension Array where Element == String {
    init(_ size: Int) {
        self = [Element](repeating: "", count: size)
    }
}

extension Array {
    @inlinable func count(_ predicate: ((Element) -> Bool)) -> Int {
        var cnt = 0; for e in self { if (predicate(e)) { cnt += 1 } }
        return cnt
    }
    @inlinable func groupBy<K>(_ keySelector: (Element) -> K) -> [K : [Element]] {
        var destination = [K : [Element]]()
        for element in self {
            let key = keySelector(element)
            var list = destination.getOrSet(key) { [Element]() }
            list.append(element)
            destination[key] = list
        }
        return destination
    }
    @inlinable func groupByIndexed<K>(_ keySelector: (Element) -> K) -> [K : [Int]] {
        var destination = [K : [Int]]()
        for element in self.enumerated() {
            let key = keySelector(element.element)
            var list = destination.getOrSet(key) { [Int]() }
            list.append(element.offset)
            destination[key] = list
        }
        return destination
    }
}

extension Array {
    func binarySearch(_ element: Element, by compare: (Element, Element) -> Int, fromIndex: Int = 0, toIndex: Int = -1) -> Int {
        var low = fromIndex
        var high = (toIndex == -1) ? self.count - 1 : toIndex - 1
        while (low <= high) {
            let mid = (low + high) >> 1 // safe from overflows
            let midVal = self[mid]
            let cmp = compare(midVal, element)
            if (cmp < 0) { low = mid + 1 }          //-1
            else if (0 < cmp) { high = mid - 1 }    // 1
            else { return mid } // key found        // 0
        }
        return -(low + 1)  // key not found
    }
}
extension Array where Element : Comparable {
    func binarySearch(_ element: Element, fromIndex: Int = 0, toIndex: Int = -1) -> Int {
        var low = fromIndex
        var high = (toIndex == -1) ? self.count - 1 : toIndex - 1
        while (low <= high) {
            let mid = (low + high) >> 1 // safe from overflows
            let midVal = self[mid]
            if (midVal < element) { low = mid + 1 }
            else if (midVal > element) { high = mid - 1 }
            else { return mid } // key found
        }
        return -(low + 1)  // key not found
    }
}

extension Array where Element == Int {
    @inlinable func distinct() -> [Element] {
        var set = Set<Element>(), ary = [Element]()
        for n in self.indices { if !set.contains(self[n]) { ary.append(self[n]); set.insert(self[n]) } }
        return ary
    }
    @inlinable func any(_ predicate: (Element) -> Bool) -> Bool {
        var any = false; for element in self { if predicate(element) { any = true } }
        return any
    }
    @inlinable func all(_ predicate: (Element) -> Bool) -> Bool {
        self.allSatisfy(predicate)
    }
    @inlinable func sum() -> Element { self.reduce(0, +) }
    @inlinable func sum(by predicate: (Element) -> Element) -> Element {
        var sum = 0; for e in self { sum += predicate(e) }
        return sum
    }
    @inlinable func joinToString(_ sepatator: String = " ") -> String { self.map { String($0) }.joined(separator: sepatator) }
}

extension Array where Element == Double {
    @inlinable func sum() -> Element { self.reduce(0.0, +) }
    @inlinable func sum(by predicate: (Element) -> Element) -> Element {
        var sum = 0.0; for e in self { sum += predicate(e) }
        return sum
    }
    @inlinable func joinToString(_ sepatator: String = " ") -> String { self.map { String($0) }.joined(separator: sepatator) }
}
extension Array where Element == String {
    @inlinable func toIntDouble() -> (Int, Double) { (Int(self[0])!, Double(self[1])!) }
    @inlinable func toIntString() -> (Int, String) { (Int(self[0])!, self[1]) }
    @inlinable func toIntIntString() -> (Int, Int, String) { (Int(self[0])!, Int(self[1])!, self[2]) }
}

@inlinable func block( _ action: () -> Void) {
    action()
}
@inlinable func repeate(_ times1: Int, _ action: () -> Void) {
    for _ in 0 ..< times1 { action() }
}
@inlinable func repeate(_ times1: Int, _ action: (Int) -> Void) {
    for index1 in 0 ..< times1 {
        action(index1)
    }
}
@inlinable func repeate(_ times1: Int, _ times2: Int, _ action: (Int, Int) -> Void) {
    for index1 in 0 ..< times1 {
        for index2 in 0 ..< times2 {
            action(index1, index2)
        }
    }
}
@inlinable func repeate(_ times1: Int, _ times2: Int, _ times3: Int, _ action: (Int, Int, Int) -> Void) {
    for index1 in 0 ..< times1 {
        for index2 in 0 ..< times2 {
            for index3 in 0 ..< times3 {
                action(index1, index2, index3)
            }
        }
    }
}
@inlinable func repeate(_ times1: Int, _ times2: Int, _ times3: Int, _ times4: Int, _ action: (Int, Int, Int, Int) -> Void) {
    for index1 in 0 ..< times1 {
        for index2 in 0 ..< times2 {
            for index3 in 0 ..< times3 {
                for index4 in 0 ..< times4 {
                    action(index1, index2, index3, index4)
                }
            }
        }
    }
}

func measureTimeSeconds(block: (() -> Void)) -> Double {
    let startTime = Date()
    block()
    let duration = -startTime.timeIntervalSinceNow
    return duration
}


let a = readLine()!

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
"u", "v", "w", "x", "y", "z"]
che(chra: a)

func che(chra: String) -> Void {
    for i in arr {
        if chra == i {
            print(chra.uppercased())
            return
        }
    }
    print(a.lowercased())
}


// import std = require('tstl')

{
  type Print = void | string | number | string[] | number[];
  let outs: Print[] = [];

  const main = (): Print => {
    const r = _io();
    const [s] = r.ss();

    return 'a' <= s && s <= 'z' ? 'a' : 'A';
  };

  const _io = (i = 0) => {
    const str = require('fs').readFileSync('/dev/stdin', 'utf8');
    const lines = str.trim().split('\n');
    const s = () => lines[i++] || '';
    const n = () => Number(s());

    const mn = (v: string[]) => v.map(Number);
    const sp = (v: string) => v.split(' ');

    const ss = () => sp(s());
    const nn = () => mn(ss());
    const nls = () => mn(lines.slice(i));
    const nnls = () => lines.slice(i).map((v) => mn(sp(v)));

    return { lines, s, n, ss, nn, nls, nnls };
  };

  outs.push(main());

  console.log(
    outs
      .map((line) => (typeof line === 'object' ? line.join(' ') : String(line)))
      .join('\n')
  );
}


import { readFileSync } from "fs";

const read = () =>
  readFileSync(0, "utf8")
    .split("\n")
    .map((line) => line.split(" "));

const main = (input: string[][]) => {
  const alpha = input[0][0];

  return alpha !== alpha.toLowerCase() ? "A" : "a";
};

console.log(main(read()));


import * as fs from "fs";
const input = fs.readFileSync("/dev/stdin", "utf8");
const re = /[A-Z]+/;
console.log(re.test(input) ? "A" : "a");


import * as fs from 'fs';

const input = fs.readFileSync("/dev/stdin", "utf8");

if (input === input.toUpperCase()) {
  console.log('A');
}
console.log('a');


import * as fs from 'fs';

const readString = (() => {
  const input = fs.readFileSync(0).toString();
  const words = input.split(/[ \n]/);
  let i = 0;
  return () => words[i++] || '';
})();
const readInt = () => parseInt(readString(), 10);
const readBigInt = () => BigInt(readString());

const gcd = (a: bigint, b: bigint) => {
  const _gcd = (a: bigint, b: bigint): bigint => {
    const q = a % b;
    return q === 0n ? b : _gcd(b, q);
  };
  return a > b ? _gcd(a, b) : _gcd(b, a);
};

const MOD = 1000000007;
const MOD_BIGINT = BigInt(MOD);
class ModBigInt {
  constructor(public v: bigint) {}

  static of(n: number | bigint) {
    return new ModBigInt(ModBigInt.toBigInt(n));
  }

  static toBigInt(other: number | bigint | ModBigInt) {
    if (typeof other === 'bigint') return other;
    if (typeof other === 'number') return BigInt(other);
    return other.v;
  }

  clone = () => new ModBigInt(this.v);
  plus = (other: number | bigint | ModBigInt) => {
    this.v = (this.v + ModBigInt.toBigInt(other)) % MOD_BIGINT;
    return this;
  };
  minus = (other: number | bigint | ModBigInt) => {
    this.v = (this.v + MOD_BIGINT - ModBigInt.toBigInt(other)) % MOD_BIGINT;
    return this;
  };
  multiply = (other: number | bigint | ModBigInt) => {
    this.v = (this.v * ModBigInt.toBigInt(other)) % MOD_BIGINT;
    return this;
  };
  pow = (other: number) => {
    const v = mod(1);
    for (let i = 0; i < other; i++) v.multiply(this.v);
    return v;
  };
}

const mod = ModBigInt.of;

const abs = (a: bigint) => (a > 0n ? a : -a);

const count = (s: number) => {
  return Math.floor(Math.sqrt(2 * s + 0.25) - 0.5);
};

(function main() {
  const A = readString();
  console.log(A.toLowerCase());
})();


// A - αlphabet
import { readFileSync } from 'fs';
const input = readFileSync('/dev/stdin', 'utf8');

const result = input === input.toUpperCase() ? 'A' : 'B';

console.log(result);


# -*- coding: utf-8 -*-

N = int(input())
S = input()

if S[:N//2] == S[N//2:]:
    print('Yes')
else:
    print('No')


N = int(input())
S = input()
ok = True
if N%2 == 1:
    ok = False
else:
    for i in range(N//2):
        if S[i] != S[i+N//2]:
            ok = False
if ok:
    print('Yes')
else:
    print('No')


N = int(input())
S = input()

if N%2 == 1:
    print('No')
elif S[0:N//2] == S[N//2:]:
    print('Yes')
else:
    print('No')


N = int(input())
S = input()
if(N % 2 == 1):
    print("No")
    exit()
for i in range(N//2):
    if(S[i] != S[i+3]):
        print("No")
        exit()
print("Yes")


N = int(input())
S = input()

if S[:N] == S[N:]:
    print("Yes")
else:
    print("No")


N = int(input())
S = input()
if N%2 == 0:
  T = S[0:N/2]
  if T+T == S:
    print("Yes")
  else:
    print("No")
else:
  print("No")


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    private static final int MOD = (int) Math.pow(10, 9);
    private static final int[][] DIRS = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

    public static void main(String[] args) {
        FastReader sc = new FastReader();
        int n = sc.nextInt();
        String s = sc.next();

        if (s.substring(0, n/2).equals(s.substring(n/2))) {
            print("Yes");
        } else {
            print("No");
        }

        //print(""+sum);
        System.exit(0);
    }

    static private void swap(int[] nums, int x, int y) {
        int tmp = nums[x];
        nums[x] = nums[y];
        nums[y] = tmp;
    }

    static  private void reverse(int[] nums, int left, int right) {
        while (left < right) {
            swap(nums, left, right);
            left++;
            right--;
        }
    }

    static private boolean findNextPermutation(int[] nums) {
        if (nums.length <= 1) {
            return false;
        }

        int last = nums.length - 2;

        while (last >= 0) {
            if (nums[last] < nums[last + 1]){
                break;
            }
            last--;
        }

        if (last < 0) { return false; }
        int nextGenerater = nums.length - 1;

        for (int i = nums.length - 1; i > last; i--) {
            if (nums[i] > nums[last]) {
                nextGenerater = i;
                break;
            }
        }

        swap(nums, nextGenerater, last);
        reverse(nums, last + 1, nums.length - 1);
        return true;
    }

    static private int[] generateNArray(int n) {
        int[] res = new int[n];

        for (int i = 0; i < n; i++) {
            res[i] = i + 1;
        }

        return res;
    }

    static  private void print(String s) {
        System.out.println(s);
    }

    static private void printArray(int[] e) {
        for (int s: e) {
            System.out.print(s + " ");
        }
        print("");
    }

    static private int log2(int x) {
        return (int)(Math.log(x) / Math.log(2));
    }

    static private long gcd(long m, long n) {
        if (m < n) { return gcd(n, m); }
        if (m % n == 0) { return n; }
        return gcd(n, m%n);
    }

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException  e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try{
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}


import java.io.*;

class Main {
	public static void main(String[] args) {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		try{
			String line = reader.readLine();
			int n = Integer.parseInt(line);
			line = reader.readLine();
			char[] s =line.toCharArray();
			String ans = "Yes";

			if(n%2 != 0){
				ans = "No";
			}else{
				if(!(line.substring(0, n/2).equals(line.substring(n/2, n)))){
					ans = "No";
				}
			}
			System.out.println(ans);
		} catch(IOException e) {
			System.out.println(e);
		} catch(NumberFormatException e) {
			System.out.println(e);
		}
	}
}


import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.NoSuchElementException;

public class Main {

	public static void main(String[] args) {

		FastScanner sc = new FastScanner();
		PrintWriter out = new PrintWriter(System.out);

		int N=sc.nextInt();
		char[] S=sc.nextCharsN(N);

		if(N%2==1) {
			System.out.println("No");
			return;
		}

		for(int i=0;i<N/2;i++) {
			if(S[i]!=S[i+N/2]) {
				System.out.println("No");
				return;
			}
		}

		out.print("Yes");

		out.flush();

	}

}

class FastScanner {
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	public boolean hasNext() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
		return hasNextByte();
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}

	public int nextInt() {
		long nl = nextLong();
		if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE)
			throw new NumberFormatException();
		return (int) nl;
	}

	public double nextDouble() {
		return Double.parseDouble(next());
	}

	public int[] nextIntsN(int N) {
		int[] ints = new int[N];
		for (int i = 0; i < N; i++) {
			ints[i] = nextInt();
		}
		return ints;
	}

	public long[] nextLongsN(int N) {
		long[] longs = new long[N];
		for (int i = 0; i < N; i++) {
			longs[i] = nextLong();
		}
		return longs;
	}

	public char[] nextCharsN(int N) {
		char[] chars = new char[N];
		String msg=next();
		for (int i = 0; i < N; i++) {
			chars[i] = msg.charAt(i);
		}
		return chars;
	}

	public char[][] nextCharsHW(int H, int W) {
		char[][] chars = new char[H][W];
		for (int i = 0; i < H; i++) {
			String str = next();
			for (int j = 0; j < W; j++) {
				chars[i][j] = str.charAt(j);
			}
		}
		return chars;
	}

	public int[][] nextIntsNM(int N, int M) {
		int[][] ints = new int[N][M];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				ints[i][j] = nextInt();
			}
		}
		return ints;
	}

	public List<Integer> nextArrayIntsN(int N){
		ArrayList<Integer> array =new ArrayList<>(N);
		for(int i=0;i<N;i++) {
			array.add(nextInt());
		}
		return array;
	}

	public List<Long> nextArrayLongsN(int N){
		ArrayList<Long> array =new ArrayList<>(N);
		for(int i=0;i<N;i++) {
			array.add(nextLong());
		}
		return array;
	}

	public List<List<Long>> nextArrayLongsNM(int N,int M){

		List<List<Long>> arrays=new ArrayList<List<Long>>(M);
		for(int i=0;i<M;i++) {
			List<Long> array=nextArrayLongsN(N);
			arrays.add(array);
		}
		return arrays;
	}

}


import java.util.*;

class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    String S = sc.next();
    boolean answer = false;
    if(N%2==0){
      for(int i = 0;i<N/2;i++){
        if(S.charAt(i)==S.charAt(i+N)){
          if(i==N/2-1){
            answer = true;
          }
        }else{
          break;
        }
      }
    }
    if(answer){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}


import java.util.*;

class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    String S = sc.next();
    boolean answer = false;
    if(N%2==0){
      for(int i = 0;i<N%2;i++){
        if(S.charAt(i)==S.charAt(i+N)){
          if(i==N%2-1){
            answer = true;
          }
        }else{
          break;
        }
      }
    }
    if(answer){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}


import java.util.*;

class Main{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    String S = sc.next();
    boolean answer = false;
    if(N%2==0){
      for(int i = 0;i<N%2;i++){
        if(S.charAt(i)==S.charAt(i+N)){
          if(i==N-1){
            answer = true;
          }
        }else{
          break;
        }
      }
    }
    if(answer){
      System.out.println("Yes");
    }else{
      System.out.println("No");
    }
  }
}


//#include "debug.h"
#include <string.h>
#include <limits.h>
#include <map>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;

#define MAXN 200000
typedef long long i64;

int n;
char s[MAXN];

int input() {
	if (scanf("%d", &n) < 0) return 0;
	scanf("%s", s);
	return 1;
}

void init() {
}

int solve() {
	if (n%2) return 0;
	for (int i=0; i<n/2; i++)
		if (s[i] != s[i+n/2]) return 0;
	return 1;
}

void output(int ans) {
	printf("%s\n", ans? "Yes":"No");
}

void cleanup() {
}

int main() {
	//precalc();
	//int ca; scanf("%d", &ca);
	while (input()) {
		init();
		output(solve());
		cleanup();
		//break;
	}
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define max 256

int main()
{
	int n, tmp, i;
	char s[max], t_1[max], t_2[max];
	char *p;

	scanf("%d", &n);
	scanf("%d", &tmp);

	fgets(s, max, stdin);
	p = strrchr(s, '\n');
	*p = '\0';

	if (n % 2 == 1)
	{
		printf("No\n");
	}

	else
	{
		for (i = 0; i < (n / 2); i++)
		{
			t_1[i] = s[i];
			t_2[i] = s[i + (n / 2)];
		}

		t_1[n / 2] = '\0';
		t_2[n / 2] = '\0';

		if (strcmp(t_1, t_2) == 0)
		{
			printf("Yes\n");
		}
		else
		{
			printf("No\n");
		}

	}
	return 0;

}


#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
int main(){
    int n,cnt=0,cnt1=0;
    int k,l,e=0;
    scanf("%d",&n);
    char s[n],a[n/2],b[n/2];
    scanf("%s",&s);
      if(n%2!=0)
        printf("No");
    for(int k=0; k<n; k++){
    if(s[k]>='A' && s[k]<='Z'){
       cnt1++;}
    }
    if(cnt1==0){
    if(n%2==0){
    for(int i=0;i<n/2;i++){
        a[i]=s[i];}
    for(int j=n/2;j<n;j++){
        b[e++]=s[j];}

    for(k=0,l=0;k<n/2,l<n/2;k++,l++){
    if(a[k]==b[l])
        cnt++;
    else
        cnt=0;}
    if(cnt==n/2)
        printf("Yes");
    else
        printf("No");}}
    if(n%2==0 && cnt1>0)
        printf("No");
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    int ans = 0;
    for (int i = 0; i < n / 2; i++) {
        if (s[i] == s[i + n / 2]) {
            ans++;
        }
    }
    if (n == 1) {
        cout << "No" << endl;
    } else if (n > 1 && ans == n / 2) {
        cout << "Yes" << endl;
    } else if (n > 1 && ans != n / 2) {
        cout << "No" << endl;
    }
    return 0;
}