#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T &a, const T &b) {
  if (a > b) a = b;
}
template <class T>
inline void checkmax(T &a, const T &b) {
  if (a < b) a = b;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
T lcm(const T &a, const T &b) {
  return a * (b / gcd(a, b));
}
template <class T>
inline T sqr(T X) {
  return X * X;
}
const long double PI = acos(-1.0L);
template <class T>
bool isprime(T n) {
  if (n < 2) return false;
  if (n % 2 == 0) return n == 2;
  for (T i = 3; i * i <= n; i += 2)
    if (n % i == 0) return false;
  return true;
}
template <class T>
inline T iabs(T a) {
  if (a < 0) return -a;
  return a;
}
template <class T>
T Dist(T x1, T y1, T x2, T y2) {
  return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}
template <class T>
T DistSqr(T x1, T y1, T x2, T y2) {
  return sqr(x1 - x2) + sqr(y1 - y2);
}
template <class T>
string toString(T n) {
  ostringstream ost;
  ost << n;
  return ost.str();
}
int toInt(string s) {
  int r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
long long toLL(string s) {
  long long r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
double toDouble(string s) {
  double r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
long double toLD(string s) {
  long double r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
template <class T>
void stoa(const string &s, T A[], int &n) {
  n = 0;
  istringstream sin(s);
  for (T v; sin >> v; A[n++] = v)
    ;
}
template <class T>
string atos(T A[], int n) {
  ostringstream sout;
  for (int i = 0; i < n; i++) {
    if (i > 0) sout << ' ';
    sout << A[i];
  }
  return sout.str();
}
template <class T>
vector<T> atov(T A[], int n) {
  vector<T> v(n);
  for (int i = 0; i < n; i++) v[i] = A[i];
  return v;
}
template <class T>
void vtoa(vector<T> vi, T A[], int &n) {
  n = vi.size();
  for (int i = 0; i < n; i++) A[i] = vi[i];
}
template <class T>
vector<T> stov(string s) {
  vector<T> vi;
  istringstream sin(s);
  for (T v; sin >> v; vi.push_back(v))
    ;
  return vi;
}
template <class T>
string vtos(vector<T> vinput) {
  ostringstream sout;
  for (int i = 0; i < vinput.size(); i++) {
    if (i > 0) sout << ' ';
    sout << vinput[i];
  }
  return sout.str();
}
template <class T>
inline int countones(T n) {
  int c = 0;
  for (; n; c++) n &= (n - 1);
  return c;
}
template <class T>
inline T lowbit(T n) {
  return (n ^ (n - 1)) & n;
}
template <class T>
inline T getmod(T n, T m) {
  return (n % m + m) % m;
}
template <class T>
inline T multiplymod2(T a, T b, T m) {
  return (
      T)((((long long)(a) * (long long)(b) % (long long)(m)) + (long long)(m)) %
         (long long)(m));
}
template <class T>
inline T powermod2(T p, int e, T m) {
  if (e == 0)
    return 1 % m;
  else if (e % 2 == 0) {
    T t = powermod2(p, e / 2, m);
    return multiplymod2(t, t, m);
  } else
    return multiplymod2(powermod2(p, e - 1, m), p, m);
}
template <class T>
T multiplymod(T a, T b, T c) {
  T X = 0, Y = a % c;
  while (b > 0) {
    if (b % 2 == 1) X = (X + Y) % c;
    Y = (Y * 2) % c;
    b /= 2;
  }
  return X % c;
}
template <class T>
T powermod(T a, T b, T c) {
  T res = 1;
  while (b > 0) {
    if (b & 1) res = multiplymod(res, a, c);
    a = multiplymod(a, a, c);
    b /= 2;
  }
  return res % c;
}
template <class T>
T powermod3(T a, T b, T c) {
  long long X = 1;
  for (int i = 0; i < b; i++) X = (X * a) % c;
  return X % c;
}
bool isleap(int year) {
  return (year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0));
}
template <class T>
T ipow(const T &m, const T &n) {
  if (n == 0) return 1;
  T a = ipow(m, n / 2);
  return (n & 1) ? a * a * m : a * a;
}
vector<string> split(string in, char m = '@') {
  vector<string> out;
  in += m;
  string a;
  for (int i = 0; i < (in.size()); ++i)
    if (in[i] == m)
      out.push_back(a), a = "";
    else
      a += in[i];
  return out;
}
int main() {
  string in;
  while (cin >> in) {
    vector<string> out = split(in, '@');
    bool error = 0;
    if (out.size() < 2)
      error = 1;
    else {
      if (out[0].size() == 0 || out.back().size() == 0) error = 1;
      for (int i = (1); i <= (out.size() - 2); i++) {
        if (out[i].size() < 2) error = 1;
      }
    }
    if (error) {
      cout << "No solution" << endl;
    } else {
      cout << out[0] << "@" << out[1][0];
      for (int i = (1); i <= (out.size() - 2); i++) {
        cout << "," << out[i].substr(1) << "@" << out[i + 1][0];
      }
      if (out.back().size() > 1) {
        cout << out.back().substr(1);
      }
      cout << endl;
    }
  }
  return 0;
}
